C++編程中刪除運(yùn)算符與相等運(yùn)算符的使用解析
delete刪除運(yùn)算符
釋放內(nèi)存塊。
語(yǔ)法
[::] delete cast-expression [::] delete [ ] cast-expression
備注
cast-expression 參數(shù)必須是指向以前分配給使用 new 運(yùn)算符創(chuàng)建的對(duì)象的內(nèi)存塊的指針。 delete 運(yùn)算符的結(jié)果類型為 void,因此它不返回值。例如:
CDialog* MyDialog = new CDialog; // use MyDialog delete MyDialog;
對(duì)指向不使用 new 分配的指針使用 delete 將產(chǎn)生不可預(yù)知的結(jié)果。但是,可以對(duì)值為 0 的指針使用 delete。此設(shè)置意味著,當(dāng) new 失敗并返回 0 時(shí),刪除已失敗 new 操作的結(jié)果不會(huì)造成損害。
new 和 delete 運(yùn)算符還可用于內(nèi)置類型(包括數(shù)組)。如果 pointer 指的是某一數(shù)組,請(qǐng)?jiān)?pointer 前放置空括號(hào):
int* set = new int[100];
//use set[]
delete 運(yùn)算符delete [] set;
對(duì)對(duì)象使用 delete 運(yùn)算符將釋放其內(nèi)存。在刪除對(duì)象后取消引用指針的程序可能會(huì)產(chǎn)生不可預(yù)知的結(jié)果或崩潰。
將 delete 用于釋放 C++ 類對(duì)象的內(nèi)存時(shí),將在釋放該對(duì)象的內(nèi)存之前調(diào)用該對(duì)象的析構(gòu)函數(shù)(如果該對(duì)象具有析構(gòu)函數(shù))。
如果 delete 運(yùn)算符的操作數(shù)是可修改的左值,則在刪除該對(duì)象后未定義其值。
使用 delete
有兩個(gè)語(yǔ)法變體:一個(gè)針對(duì)單一對(duì)象,另一個(gè)針對(duì)對(duì)象數(shù)組。以下代碼片段演示了它們之間的差異:
// expre_Using_delete.cpp struct UDType { }; int main() { // Allocate a user-defined object, UDObject, and an object // of type double on the free store using the // new operator. UDType *UDObject = new UDType; double *dObject = new double; // Delete the two objects. delete UDObject; delete dObject; // Allocate an array of user-defined objects on the // free store using the new operator. UDType (*UDArr)[7] = new UDType[5][7]; // Use the array syntax to delete the array of objects. delete [] UDArr; }
以下兩種情況會(huì)生成未定義的結(jié)果:在對(duì)象中使用 delete 的數(shù)組形式 (delete [ ]),并在數(shù)組中使用 delete 的非數(shù)組形式。
delete 的工作方式
將調(diào)用函數(shù)運(yùn)算符 delete。
對(duì)于不是類類型(class、struct 或 union)的對(duì)象,將調(diào)用全局 delete 運(yùn)算符。對(duì)于類類型的對(duì)象,如果刪除表達(dá)式以一元范圍解析運(yùn)算符 (::) 開(kāi)始,則會(huì)在全局范圍中解析釋放函數(shù)的名稱。否則,delete 運(yùn)算符將在釋放內(nèi)存之前為對(duì)象調(diào)用析構(gòu)函數(shù)(如果指針不為 null)??蔀槊總€(gè)類定義 delete 運(yùn)算符;如果給定類不存在這種定義,則會(huì)調(diào)用全局 delete 運(yùn)算符。如果刪除表達(dá)式用于釋放其靜態(tài)對(duì)象具有虛擬析構(gòu)函數(shù)的類對(duì)象,則將通過(guò)對(duì)象的動(dòng)態(tài)類型的虛擬析構(gòu)函數(shù)解析釋放函數(shù)。
相等運(yùn)算符:== 和 !=
語(yǔ)法
expression == expression expression != expression
備注
二元相等運(yùn)算符將嚴(yán)格比較其操作數(shù)的相等性或不相等性。
相等運(yùn)算符(等于 (==) 而不等于 (!=))的優(yōu)先級(jí)低于關(guān)系運(yùn)算符的優(yōu)先級(jí),但其行為類似。這些運(yùn)算符的結(jié)果類型為 bool。
如果這兩個(gè)操作數(shù)具有相同的值,則相等運(yùn)算符 (==) 返回 true (1);否則返回 false (0)。如果操作數(shù)不具有相同的值,則不相等運(yùn)算符 (!=) 返回 true;否則返回 false。
!= 的運(yùn)算符關(guān)鍵字
not_eq 運(yùn)算符是 != 的文本等效項(xiàng)。訪問(wèn)程序中的 not_eq 運(yùn)算符的方式有兩種:包括頭文件 iso646.h,或使用 /Za(禁用語(yǔ)言擴(kuò)展)編譯器選項(xiàng)進(jìn)行編譯。
// expre_Equality_Operators.cpp // compile with: /EHsc #include <iostream> using namespace std; int main() { cout << boolalpha << "The true expression 3 != 2 yields: " << (3 != 2) << endl << "The false expression 20 == 10 yields: " << (20 == 10) << endl; }
相等運(yùn)算符可比較指向同一類型的成員的指針。
- 詳解C++中的函數(shù)調(diào)用和下標(biāo)以及成員訪問(wèn)運(yùn)算符的重載
- 詳解C++編程中一元運(yùn)算符的重載
- 詳解C++語(yǔ)言中的加法運(yùn)算符與賦值運(yùn)算符的用法
- C++編程中的或||、與&&、非!邏輯運(yùn)算符基本用法整理
- 深入解析C++編程中的運(yùn)算符重載
- 詳解C++中new運(yùn)算符和delete運(yùn)算符的使用
- 簡(jiǎn)單了解C++語(yǔ)言中的二元運(yùn)算符和賦值運(yùn)算符
- 詳解C++中const_cast與reinterpret_cast運(yùn)算符的用法
- 講解C++編程中Address-of運(yùn)算符&的作用及用法
- 詳解C++編程中的sizeof運(yùn)算符與typeid運(yùn)算符
- C++編程中逗號(hào)運(yùn)算符和條件運(yùn)算符的使用方法講解
- 深入解析C++編程中__alignof 與__uuidof運(yùn)算符的使用
- C++中的運(yùn)算符和運(yùn)算符優(yōu)先級(jí)總結(jié)
相關(guān)文章
C/C++中不同數(shù)據(jù)類型之間的轉(zhuǎn)換詳解
這篇文章主要介紹了C/C++中不同數(shù)據(jù)類型之間的轉(zhuǎn)換詳解,數(shù)據(jù)類型轉(zhuǎn)換是計(jì)算機(jī)編程中常見(jiàn)的操作,用于將一個(gè)數(shù)據(jù)類型轉(zhuǎn)換為另一個(gè)數(shù)據(jù)類型,本文將對(duì)不同數(shù)據(jù)類型之間的轉(zhuǎn)換作出說(shuō)明,需要的朋友可以參考下2023-10-10利用QDir實(shí)現(xiàn)刪除選定文件目錄下的空文件夾
這篇文章主要為大家詳細(xì)介紹了如何利用QDir實(shí)現(xiàn)刪除選定文件目錄下的空文件夾功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下2022-08-08詳解QListWidget如何實(shí)現(xiàn)自定義Item效果
這篇文章主要為大家介紹了如何通過(guò)QListWidget實(shí)現(xiàn)自定義Item效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2022-04-04C語(yǔ)言多線程服務(wù)器的實(shí)現(xiàn)實(shí)例
這篇文章主要介紹了C語(yǔ)言多線程服務(wù)器的實(shí)現(xiàn)實(shí)例,文章用實(shí)例講解的很清楚,有對(duì)這方面不太懂的同學(xué)可以參考下2021-02-02利用C++如何實(shí)現(xiàn)一個(gè)阻塞隊(duì)列詳解
這篇文章主要給大家介紹了關(guān)于利用C++如何實(shí)現(xiàn)一個(gè)阻塞隊(duì)列的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10C++ 十進(jìn)制轉(zhuǎn)換為二進(jìn)制的實(shí)例代碼
這篇文章介紹了C++ 十進(jìn)制轉(zhuǎn)換為二進(jìn)制的實(shí)例代碼,有需要的朋友可以參考一下2013-10-10C語(yǔ)言順序表的基本結(jié)構(gòu)與實(shí)現(xiàn)思路詳解
順序表是用一段物理地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)數(shù)據(jù)元素的線性結(jié)構(gòu),一般情況下采用數(shù)組存儲(chǔ)。本文將通過(guò)示例為大家講解一下順序表的基本操作,需要的可以參考一下2023-02-02