Mix*_*hos 11 c++ delete-operator
我正在编写一个模板类,它在内部管理给定类型的数组.像这样:
template<typename T>
class Example {
// ...
private:
T* objects; // allocated in c'tor (array), deleted in d'tor
// ...
};
Run Code Online (Sandbox Code Playgroud)
我想知道objects
当我删除它时,C++是否会调用每个对象的析构函数delete[] objects;
.
我需要知道这一点,因为我的类中的对象始终不包含合理的值,因此不应该在不执行时调用析构函数.
此外,我想知道,如果我宣布一个固定大小的数组像析构函数将被称为T objects[100]
作为的一部分Example<T>
.
hmj*_*mjd 21
如果T
有一个析构函数,那么它将被调用delete[]
.从第5.3.5节删除 c ++ 11标准(草案n3337),第6节:
如果delete-expression的操作数的值不是空指针值,则delete-expression将调用该对象的析构函数(如果有)或要删除的数组的元素.在数组的情况下,元素将按地址递减的顺序销毁(即,与构造函数完成的顺序相反;见12.6.2).
当数组未动态分配且数组超出范围(生命周期结束)时,T
也将为数组中的每个元素调用类型的析构函数T[]
.
我需要知道这一点,因为我的类中的对象始终不包含合理的值,因此不应该在不执行时调用析构函数.
但是,对象可能会获得一个无法被破坏的状态,这似乎是一个非常重要的问题.
是的,当使用 时,将会为数组中的所有对象调用析构函数delete[]
。但这不应该成为问题,因为当您使用(您确实这样做了,对吧?)分配数组时,会为数组中的所有对象调用new[]
构造函数。
如果构造的对象可能处于调用析构函数无效的状态,那么您的对象就存在严重错误。您需要使析构函数在所有情况下都能工作。
归档时间: |
|
查看次数: |
8433 次 |
最近记录: |