gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:30:21 28 4
gpt4 key购买 nike

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com