我有一个基本而简单的问题。
我有这种情况:
#include <iostream>
using namespace std;
class Inner1
{
public:
~Inner1() {cout << "Inner1 Des\n";};
};
class Inner2
{
public:
~Inner2() {cout << "Inner2 Des\n";};
};
class Base
{
public:
~Base() {cout << "Base Des\n";};
Inner1 inner1;
Inner2 inner2;
};
int main() {
Base base;
return 0;
}
现在我的控制台告诉我:
Base destructor called
Inner2 destructor called
Inner1 destructor called
这是正常行为吗?因为某些功能的功能
已经在我的基类析构函数中被销毁,内部类依赖
在他们身上。
不推荐的解决方法:
只需在第一个位置添加一个带有对象的“Destroyer”类:
[...]
class Base
{
public:
~Base() {cout << "Base Des\n";};
class Destroyer
{
~Destroyer()
{
//Put the stuff here because this destr will be called last
cout << "Destroyer Des\n";
}
} _destroyer;
Inner1 inner1;
[...]
谢谢你的帮助
最佳答案
Is this the normal behavior?
是的。子对象析构函数由容器类的析构函数调用。特别是,子对象将在容器类析构函数的主体执行后被销毁。
Because the functionality for some functions is already destroyed in my Base Class destructor and the Inner classes rely on them.
只有当内部类 [sic] 析构函数依赖于包含它们的 Base
实例时才会出现问题。在这种情况下,Base
不应将它们作为成员包含,或者它们的析构函数不应依赖于 Base
。
关于c++ - 内部类析构函数在基类析构函数之后调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36882627/