当前位置: 首页 > 工具软件 > delete > 使用案例 >

C++:delete 运算符

戈睿识
2023-12-01

简介

释放内存块。

语法

[ :: ] delete 强制转换表达式
[ :: ] delete [] 强制转换表达式

备注

强制转换表达式 参数必须是指向以前为使用 new 运算符创建的对象分配的内存块的指针。 delete 运算符的结果为类型 void ,因此不返回值。 例如:

CDialog* MyDialog = new CDialog;
// use MyDialog
delete MyDialog;

对 delete 未使用分配的对象的指针使用会 new 产生不可预知的结果。 但是,可以 delete 对值为0的指针使用。 此设置意味着,当 new 发生故障时返回0时,删除失败的操作的结果 new 是无害的。

new 和 delete 运算符还可用于内置类型(包括数组)。 如果 pointer 引用数组,请将空方括号 ([]) 之前 pointer :

int* set = new int[100];
//use set[]
delete [] set;

delete 在对象上使用运算符将释放其内存。 在删除对象后取消引用指针的程序可能会产生不可预知的结果或崩溃。

当 delete 使用释放 c + + 类对象的内存时,将在释放对象的内存之前调用对象的析构函数 (如果对象具有析构函数) 。

如果运算符的操作数 delete 是可修改的左值,则在删除对象后,其值将为 undefined。

如果 /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 的工作方式

Delete 运算符调用函数 运算符 delete。

对于不属于类类型 (类、 结构或 联合) 的对象,将调用全局 delete 运算符。 对于类类型的对象,如果删除表达式以一元范围解析运算符开头 () ,则释放函数的名称将在全局范围内解析 :: 。 否则,delete 运算符将在释放内存之前为对象调用析构函数(如果指针不为 null)。 可为每个类定义 delete 运算符;如果给定类不存在这种定义,则会调用全局 delete 运算符。 如果删除表达式用于释放其静态对象具有虚拟析构函数的类对象,则将通过对象的动态类型的虚拟析构函数解析释放函数。

该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处,本文章博客地址:https://blog.csdn.net/it_cplusplus/article/details/118501812

 类似资料: