c++ - 显式调用析构函数的行为

标签 c++ destruction

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/

相关文章:

c++ - 静态函数作用域对象的构造是线程安全的吗?

c++ - 记事本中的 Turbo C 数据库

c++ - C++ 模板故障排除简介

c++ - OgreSdk 1.9.1 - 断言失败

c++ - 函数参数的后期销毁

c++ - Qt 如何删除对象?存储 QObject 的最佳方式是什么?

c++ - C++中包含静态成员的静态成员类

c++ - 自动对象销毁

c++ - 定义 vector 元素的破坏顺序是否合理?

c++ - 在 C++ STL 中搜索映射中的键时,出现以下错误