【发布时间】:2020-11-29 09:55:49
【问题描述】:
class A
{
public:
~A()
{
std::cout << "A destroyed" << std::endl;
}
};
class B
{
public:
A a;
~B()
{
std::cout << "B destroyed" << std::endl;
}
};
int main()
{
B b;
b.~B();
}
输出:
B destroyed
A destroyed
B destroyed
A destroyed
有人可以向我解释这里发生了什么吗?我希望输出是
B destroyed
A destroyed
(当 ~B() 被调用时,一次 ~A() 被调用)。
【问题讨论】:
-
这称为“未定义行为”。只需阅读警告部分,其中解释了显式析构函数调用的语法。
-
为什么要在代码中显式调用析构函数?
-
@πάνταῥεῖ 哦,我不知道我们不应该显式调用析构函数。
-
@Jamāl 希望我的回答能帮助你理解为什么你不需要调用析构函数。
-
唯一需要显式调用析构函数的时候是在使用placement new 构造对象时。
标签: c++ explicit-destructor-call