some_class
的定义是:
class some_class
{
// stuff
public:
~some_class()
{
delete dynamic_three;
}
private:
classA one;
classB two;
classC* dynamic_three;
}
当一个对象的生命周期结束时,它的销毁是:(1)调用它的析构函数和(2)按照它们在类定义中声明的顺序(=内存中的位置)销毁它的子对象。
但是,如果我有类似的东西:
auto* ptr = new some_class();
// more stuff
ptr->~some_class(); // l. X
第(2)步也实现了?我的意思是,在 X 行中,子对象的析构函数是否也被调用或仅在 some_class
的析构函数主体中执行?
最佳答案
The step (2) is also realized?
是的,这是有保证的。这种行为是安全的,但请注意,在您的情况下,如果不首先通过 placement-new 重新构造对象,就无法安全地回收对象的内存(除非您为对象覆盖了 operator new
并且因此,您可以保证内存是如何分配的并使用匹配的释放)。
关于c++ - 显式调用析构函数的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15368633/