显式调用析构函数的行为

Per*_*-lk 5 c++ destruction

定义some_class是:

class some_class
{
   // stuff

public:
   ~some_class()
   {
         delete dynamic_three;
   }

private:
   classA one;
   classB two;
   classC* dynamic_three;
}
Run Code Online (Sandbox Code Playgroud)

当一个对象的生命周期结束时,它的破坏是:(1)调用它的析构函数和(2)以类定义(=内存中的位置)声明它们的相同顺序销毁它的子对象.

但是,如果我有类似的东西:

auto* ptr = new some_class();

// more stuff

ptr->~some_class(); // l. X
Run Code Online (Sandbox Code Playgroud)

步骤(2)也实现了吗?我的意思是,在第X行,是子对象的析构函数,也被称为或仅执行some_class析构函数的主体?

ipc*_*ipc 1

当一个对象的生命周期结束时,它的销毁是:(1)调用它的析构函数,(2)按照类定义中声明它们的顺序(=内存中的位置)销毁它的子对象。

(3)释放分配的内存。

步骤(2)也实现了?

步骤(2)可以,但步骤(3)不行。

但如果你能写

auto* ptr = new some_class();
Run Code Online (Sandbox Code Playgroud)

请注意,您也可以写

std::unique_ptr<ptr> ptr (new some_class());
Run Code Online (Sandbox Code Playgroud)

这会需要delete你(当然,只有在符合你的需求时才使用它,但如果你不确定,则默认使用它)。