C 程式設計中刪除運算子與相等運算子的使用解析

2022-10-04 02:06:11 字數 1902 閱讀 7456

delete刪除運算子

釋放記憶體塊。

語法[::] delete cast-expression

[::] delete [ ] cast-expression

備註cast-expression 引數必須是指向以前分配給使用 new 運算子建立的物件的記憶體塊的指標。 delete 運算子的結果型別為 void,因此它不返回值。例如:

cdialog mydialog = new cdialog;

// use mydialog

delete mydialog;

對指向不使用 new 分配的指標使用 delete 將產生不可預知的結果。但是,可以對值為 0 的指標使用 delete。此設定意味著,當 new 失敗並返回 0 時,刪除已失敗 new 操作的結果不會造成損害。

new 和 delete 運算子還可用於內建型別(包括陣列)。如果 pointer 指的是某一陣列,請在 pointer 前放置空括號:

int* set = new int[100];

//use set

delete 運算子delete set;

對物件使用 delete 運算子將釋放其記憶體。在刪除物件後取消引用指標的程式可能會產生不可預知的結果或崩潰。

將 delete 用於釋放 c++ 類物件的記憶體時,將在釋放該物件的記憶體之前呼叫該物件的析構函式(如果該物件具有析構函式)。

如果 delete 運算子的運算元是可修改的左值,則在刪除該物件後未定義其值。

使用 delete

有兩個語法變體:乙個針對單一物件,另乙個針對物件陣列。以下**片段演示了它們之間的差異:

// expre_using_delete.cpp

struct udtype

;int mainwww.cppcns.com()

以下兩種情況會生成未定義的結果:在物件中使用 delete 的陣列形式 (delete [ ]),並在陣列中使用 delete 的非陣列形式。

delete 的工作方式

將呼叫函式運算子 delete。

對於不是類型別(class、struct 或 union)的物件,將呼叫全域性 delete 運算子。對於類型別的物件,如果刪除表示式以一元範圍解析運算子 (::) 開始,則會在全域性範圍中解析釋放函式的名稱。否則,delete 運算子將在釋放記憶體之前為物件呼叫析構函式(如果指標不為 null)。可為每個類定義 delete 運算子;如果給定類不存在這種定義,則會呼叫全域性 delete 運算子。如果刪除表示式用於釋放其靜態物件具有虛擬析構函式的類物件,則將通過物件的動態型別的虛擬析構函式解析釋放函式。

相等運算子:== 和 !=

語法expression == expression

expression != expression

備註二元相等運算子將嚴格比較其運算元的相等性或不相等性。

相等運算子(等於 (==) 而不等於 (!=))的優先順序低於關係運算子的優先順序,但其行為類似。這些運算子的結果型別為 bool。

如果這兩個運算元具有相同的值,則相等運算子 (==) 返回 true (1);否則返回 false (0)。如果運算元不具有相同的值,則不相等運算子 (!=) 返回 true;否則返回 false。

!= 的運算子關鍵字

not_eq 運算子是 != 的文字等效項。訪問程式中的 not_eq 運算子的方式有兩種:包括標頭檔案 iso646.h,或使用 /za(禁用語言擴充套件)編譯器選項進行編譯。

// expre_equality_operators.cpp

// compile with: /ehsc

#include

using namespace std;

int main()

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

本文標題: c++程式設計中刪除運算子與相等運算子的使用解析

本文位址:

NOT運算子與 運算子

6.4.2 not運算子與 運算子 對於簡單的條件查詢,not運算子與 運算子的功能幾乎沒有什麼區別,那麼not運算子的優勢體現在 呢?答案是它可以與其他運算子組合使用,這一點是 運算子所不能實現的。在6.4.1節已經介紹了not運算子與in運算子組合使用的例子,下面給出乙個not運算子與betwe...

C語言 運算子與 運算子

我們平時使用帶參巨集時,字串中的巨集引數是沒有被替換的。例如 輸出結果為 然而,我們期望輸出的結果是 5 20 2513 14 27 這該怎麼做呢?其實,c語言允許在字串中包含巨集引數。在類函式巨集 帶參巨集 中,號作為乙個預處理運算子,可以把記號轉換成字串。例如,如果a是乙個巨集形參,那麼 a就是...

C 中 運算子 和 運算子

運算子定義在將可空型別分配給非可空型別時返回的預設值。int?c null 若 c 為 null,則 d 為 1,否則把 c 值賦予 d int d c 1 型別名稱後加問號,如 int?i null double?d null bool?b null 可指定可為 null 的 int double...