delete 運算子 (C++)
取消配置記憶體區塊。
語法
[
::
]delete
cast-expression
[::
]delete []
cast-expression
備註
cast-expression 引數必須是先前為使用新運算子 所建立之物件所配置之記憶體區塊的 指標。 運算子 delete
具有 型 void
別的結果,因此不會傳回值。 例如:
CDialog* MyDialog = new CDialog;
// use MyDialog
delete MyDialog;
在 delete
未配置 new
的物件指標上使用 會提供無法預測的結果。 不過, delete
您可以在值為 0 的指標上使用 。 這項布建表示,在失敗時傳回 0 時 new
,刪除失敗 new
作業的結果是無害的。 如需詳細資訊,請參閱 新的和刪除運算子 。
new
和 delete
運算子也可用於內建類型,包括陣列。 如果 pointer
參考陣列,請在 之前 pointer
放置空括弧 ( []
) :
int* set = new int[100];
//use set[]
delete [] set;
在 delete
物件上使用 運算子會解除配置其記憶體。 在刪除物件之後將指標取值的程式可能會有無法預期的結果或損毀。
當 用來解除配置 C++ 類別物件的記憶體時 delete
,會在取消設定物件記憶體之前呼叫物件的解構函式(如果物件具有解構函式)。
如果運算子的運算元 delete
是可修改的 l 值,則會在刪除物件之後未定義其值。
如果指定了 /sdl (啟用其他安全性檢查) 編譯器選項,運算子的運算元 delete
會在刪除物件之後設定為不正確值。
使用 delete
delete 運算子 有兩個語法變體 :一個用於單一物件,另一個用於物件陣列。 下列程式碼片段顯示其差異:
// 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 ( delete []
) 的陣列形式,以及在陣列上使用非陣列形式的 delete。
範例
如需使用 delete
的範例,請參閱 new 運算子 。
delete 運作方式
delete 運算子會叫用函式 運算子 delete 。
針對不是類別類型的物件( 類別 、 結構 或 等位 ),會叫用全域刪除運算子。 針對類別類型的物件,如果 delete 運算式以一元範圍解析運算子 ( ::
) 開頭,則會在全域範圍中解析解除配置函式的名稱。 否則,如果指標不是 Null,delete 運算子會在解除配置記憶體之前叫用物件的解構函式。 delete 運算子可以依類別來定義;如果指定類別沒有這類定義,會叫用全域 delete 運算子。 如果使用刪除運算式來解除配置靜態類型包含虛擬解構函式的類別物件,則會透過該物件之動態類型的虛擬解構函式來解析解除配置函式。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應