C++編程中刪除運算符與相等運算符的使用解析
delete刪除運算符
釋放內(nèi)存塊。
語法
[::] delete cast-expression [::] delete [ ] cast-expression
備注
cast-expression 參數(shù)必須是指向以前分配給使用 new 運算符創(chuàng)建的對象的內(nèi)存塊的指針。 delete 運算符的結果類型為 void,因此它不返回值。例如:
CDialog* MyDialog = new CDialog; // use MyDialog delete MyDialog;
對指向不使用 new 分配的指針使用 delete 將產(chǎn)生不可預知的結果。但是,可以對值為 0 的指針使用 delete。此設置意味著,當 new 失敗并返回 0 時,刪除已失敗 new 操作的結果不會造成損害。
new 和 delete 運算符還可用于內(nèi)置類型(包括數(shù)組)。如果 pointer 指的是某一數(shù)組,請在 pointer 前放置空括號:
int* set = new int[100];
//use set[]
delete 運算符delete [] set;
對對象使用 delete 運算符將釋放其內(nèi)存。在刪除對象后取消引用指針的程序可能會產(chǎn)生不可預知的結果或崩潰。
將 delete 用于釋放 C++ 類對象的內(nèi)存時,將在釋放該對象的內(nèi)存之前調(diào)用該對象的析構函數(shù)(如果該對象具有析構函數(shù))。
如果 delete 運算符的操作數(shù)是可修改的左值,則在刪除該對象后未定義其值。
使用 delete
有兩個語法變體:一個針對單一對象,另一個針對對象數(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; }
以下兩種情況會生成未定義的結果:在對象中使用 delete 的數(shù)組形式 (delete [ ]),并在數(shù)組中使用 delete 的非數(shù)組形式。
delete 的工作方式
將調(diào)用函數(shù)運算符 delete。
對于不是類類型(class、struct 或 union)的對象,將調(diào)用全局 delete 運算符。對于類類型的對象,如果刪除表達式以一元范圍解析運算符 (::) 開始,則會在全局范圍中解析釋放函數(shù)的名稱。否則,delete 運算符將在釋放內(nèi)存之前為對象調(diào)用析構函數(shù)(如果指針不為 null)??蔀槊總€類定義 delete 運算符;如果給定類不存在這種定義,則會調(diào)用全局 delete 運算符。如果刪除表達式用于釋放其靜態(tài)對象具有虛擬析構函數(shù)的類對象,則將通過對象的動態(tài)類型的虛擬析構函數(shù)解析釋放函數(shù)。
相等運算符:== 和 !=
語法
expression == expression expression != expression
備注
二元相等運算符將嚴格比較其操作數(shù)的相等性或不相等性。
相等運算符(等于 (==) 而不等于 (!=))的優(yōu)先級低于關系運算符的優(yōu)先級,但其行為類似。這些運算符的結果類型為 bool。
如果這兩個操作數(shù)具有相同的值,則相等運算符 (==) 返回 true (1);否則返回 false (0)。如果操作數(shù)不具有相同的值,則不相等運算符 (!=) 返回 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; }
相等運算符可比較指向同一類型的成員的指針。
您可能感興趣的文章
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對數(shù)怎么表達
- 04-02c語言沒有round函數(shù) round c語言
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 01-10深入理解C++中常見的關鍵字含義
- 01-10使用C++實現(xiàn)全排列算法的方法詳解
- 01-10深入Main函數(shù)中的參數(shù)argc,argv的使用詳解
- 01-10APUE筆記之:進程環(huán)境詳解
- 01-10c++中inline的用法分析
- 01-10如何尋找數(shù)組中的第二大數(shù)


閱讀排行
本欄相關
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 01-10C#中split用法實例總結
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 04-02jquery與jsp,用jquery
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改