C++編程中刪除運算子與相等運算子的使用解析_C 語言

來源:互聯網
上載者:User

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;}

相等運算子可比較指向同一類型的成員的指標。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.