定义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析构函数的主体?
当一个对象的生命周期结束时,它的销毁是:(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你(当然,只有在符合你的需求时才使用它,但如果你不确定,则默认使用它)。