作用
- 销毁先前由new表达式分配的对象
语法
::(可选) delete 表达式 |
(1) |
::(可选) delete [] 表达式 |
(2) |
- 销毁 new 表达式创建的单个非数组对象
- 销毁 new[] 表达式创建的数组
解释
对于第一种(非数组)形式:
- 表达式 必须是如下两种情况之一:
- 指向对象类型的指针
- 可以按照语境隐式转换到这种指针的类类型
- 值 必须是如下三种情况之一:
- 必须为空(null)
- 或指向new表达式所创建的非数组对象的指针
- 或指向 new 表达式所创建的对象的基类子对象的指针
若 表达式 为其他值,包括它是通过new 表达式的数组形式获得的指针的情况,其行为未定义。
对于第二种(数组)形式,
- 表达式 必须是如下两种情况之一:
- 空指针值
- 先前由 new 表达式的数组形式所获得的指针值
若 表达式 为其他值,包括若它是由 new 表达式的非数组形式获得的指针的情况,其行为未定义。
表达式的结果始终具有 void 类型。
注解
不能删除指向void的指针,因为它不是指向完整对象类型的指针。
自c++11起,因为关键词 delete 之后的一对方括号始终被解释为 delete 的数组形式,所以紧跟在 delete 之后的拥有空俘获列表的 lambda 表达式必须以括号括起来。
// delete []{return new int; }(); // 解析错误
delete ([]{
return new int; })(); // OK