C/C++编程:delete 表达式

作用

  • 销毁先前由new表达式分配的对象

语法

::(可选) delete 表达式 (1)
::(可选) delete [] 表达式 (2)
  1. 销毁 new 表达式创建的单个非数组对象
  2. 销毁 new[] 表达式创建的数组

解释

对于第一种(非数组)形式:

  • 表达式 必须是如下两种情况之一:
  • 值 必须是如下三种情况之一:
    • 必须为空(null)
    • 或指向new表达式所创建的非数组对象的指针
    • 或指向 new 表达式所创建的对象的基类子对象的指针

若 表达式 为其他值,包括它是通过new 表达式的数组形式获得的指针的情况,其行为未定义。

对于第二种(数组)形式,

  • 表达式 必须是如下两种情况之一:
    • 空指针值
    • 先前由 new 表达式的数组形式所获得的指针值

若 表达式 为其他值,包括若它是由 new 表达式的非数组形式获得的指针的情况,其行为未定义。

表达式的结果始终具有 void 类型。

注解

不能删除指向void的指针,因为它不是指向完整对象类型的指针。

自c++11起,因为关键词 delete 之后的一对方括号始终被解释为 delete 的数组形式,所以紧跟在 delete 之后的拥有空俘获列表的 lambda 表达式必须以括号括起来。

// delete []{return new int; }(); // 解析错误
delete ([]{
    
    return new int; })(); // OK

猜你喜欢

转载自blog.csdn.net/zhizhengguan/article/details/114900885