此删除是否会破坏每个数组对象
Is this deletion expected to destruct each array object?
假设我使用new
的变体来返回指向数组的指针:
class Type { /* ... */ };
typedef Type Type_42[1][42];
Type (*x)[42] = new Type_42;
由于我使用了new
来创建,所以我使用delete
来销毁:
delete x;
是否预期42个对象的每个析构函数都会被调用?
delete[]
必须用于数组,delete
必须用于非数组。由于x
是指向数组的指针,因此必须使用delete[]
。引文为[expr.delete]/2。第一个音符使这一点清晰明了。
如果操作数具有类类型,则通过调用上述函数将操作数转换为指针类型转换函数,并且在的剩余部分使用转换后的操作数代替原始操作数本节。在第一种备选方案中(删除对象),
delete
的操作数的值可能是空指针值,指向由上一个新表达式创建的非数组对象的指针,或指向子对象的指针(1.8)表示这样一个对象的基类(第10条)。如果不是,则行为未定义。在第二可选(删除数组),delete
的操作数的值可以是空指针值或指针上一个数组新表达式产生的值如果不是,则行为未定义。[注意:这个意味着删除表达式的语法必须与new
分配的对象类型匹配,而不是新表达式的语法--尾注][注意:指向const
类型的指针可以是删除表达式没有必要去掉指针表达式前面的常量(5.2.11)用作删除表达式的操作数--尾注]
相关文章:
- 销毁C++中动态分配的内存(数组对象)
- 数组对象的生存期是否在重用其元素存储时结束?
- 为什么顶点数组对象会导致错误?
- 具有纯虚函数和指针数组对象类型的父类的指针数组
- 这是使用构造函数初始化数组对象的最佳方法吗?
- OpenGL 顶点数组对象与 tinyobjloader
- 将数组/对象/结构列表从C#库中传递给C MFC应用程序
- C++ RapidJson 帮助反序列化数组对象
- ptrdiff_t可以表示指向同一数组对象元素的指针的所有减法吗?
- 检查成员函数是否返回临时对象或数组对象
- 为什么 std::variant 不能容纳数组对象类型,而联合可以?
- 当数组对象以函数参数传递时,为什么复制构造函数会自称
- 如何使用箭头指针打印出一类数组对象,这些对象中有多个分数
- C++17 std::shared_ptr<> 类数组对象的重载运算符 []
- 添加两个具有运算符重载的数组对象,从而导致分段错误
- opengl:两个不同的矢量可以绑定到同一个顶点数组对象吗
- 使用相同的数据填充数组对象或使用指针
- 方法用于最快的分配,并且不需要将动态大小的数组对象作为局部变量
- 如何将2d数组对象传递给c++中的函数
- ReferenceTable溢出(jni-android),数组对象释放