delete刪除運算子
釋放記憶體塊。
文法
[::] delete cast-expression[::] delete [ ] cast-expression
備忘
cast-expression 參數必須是指向以前分配給使用 new 運算子建立的對象的記憶體塊的指標。 delete 運算子的結果類型為 void,因此它不傳回值。例如:
CDialog* MyDialog = new CDialog;// use MyDialogdelete MyDialog;
對指向不使用 new 分配的指標使用 delete 將產生不可預知的結果。但是,可以對值為 0 的指標使用 delete。此設定意味著,當 new 失敗並返回 0 時,刪除已失敗 new 操作的結果不會造成損害。
new 和 delete 運算子還可用於內建類型(包括數組)。如果 pointer 指的是某一數組,請在 pointer 前放置空括弧:
int* set = new int[100];
//use set[]
delete 運算子delete [] set;
對對象使用 delete 運算子將釋放其記憶體。在刪除對象後取值 (Dereference)指標的程式可能會產生不可預知的結果或崩潰。
將 delete 用於釋放 C++ 類對象的記憶體時,將在釋放該對象的記憶體之前調用該對象的解構函式(如果該對象具有解構函式)。
如果 delete 運算子的運算元是可修改的左值,則在刪除該對象後未定義其值。
使用 delete
有兩個文法變體:一個針對單一對象,另一個針對對象數組。以下程式碼片段示範了它們之間的差異:
// expre_Using_delete.cppstruct 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;}
以下兩種情況會產生未定義的結果:在對象中使用 delete 的數組形式 (delete [ ]),並在數組中使用 delete 的非數組形式。
delete 的工作方式
將調用函數運算子 delete。
對於不是類類型(class、struct 或 union)的對象,將調用全域 delete 運算子。對於類類型的對象,如果刪除運算式以一元範圍解析運算子 (::) 開始,則會在全域範圍中解析釋放函數的名稱。否則,delete 運算子將在釋放記憶體之前為對象調用解構函式(如果指標不為 null)。可為每個類定義 delete 運算子;如果給定類不存在這種定義,則會調用全域 delete 運算子。如果刪除運算式用於釋放其靜態對象具有虛擬解構函式的類對象,則將通過對象的動態類型的虛擬解構函式解析釋放函數。
相等運算子:== 和 !=
文法
expression == expressionexpression != expression
備忘
二元相等運算子將嚴格比較其運算元的相等性或不相等性。
相等運算子(等於 (==) 而不等於 (!=))的優先順序低於關係運算子的優先順序,但其行為類似。這些運算子的結果類型為 bool。
如果這兩個運算元具有相同的值,則相等運算子 (==) 返回 true (1);否則返回 false (0)。如果運算元不具有相同的值,則不相等運算子 (!=) 返回 true;否則返回 false。
!= 的運算子關鍵字
not_eq 運算子是 != 的文本等效項。訪問程式中的 not_eq 運算子的方式有兩種:包括標頭檔 iso646.h,或使用 /Za(禁用語言擴充)編譯器選項進行編譯。
// 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;}
相等運算子可比較指向同一類型的成員的指標。