【发布时间】:2021-06-30 06:06:13
【问题描述】:
我有一个班级(“父母”),它有另一个班级(“孩子”)作为成员:
class Engine // THE "PARENT" CLASS
{
public:
// CONSTRUCTOR ------------------------------------
Engine() : mConfig {} // "CHILD" CLASS INITIALIZED HERE
{
// ...
return;
}
// DESTRUCTOR -------------------------------------
~Engine()
{
std::cout << "Engine destructor executing...\n";
// ...
return;
}
private:
GameConfig mConfig; // THE "CHILD" CLASS AS MEMBER OF "PARENT"
};
“子”类定义为:
class GameConfig // THE "CHILD" CLASS DEFINITION
{
public:
// ...
// DESTRUCTOR -------------------------------------
~GameConfig()
{
std::cout << "Writing config data...\n";
// ...
return;
}
};
我在 main 中实例化“父”类,然后(通过初始化列表)实例化“子”类:
int main()
{
Engine gameEngine {};
// ...
std::cout << "Goodbye!\n";
return(0);
}
根据 SO 上的this question 问题,从逻辑上讲,我认为“子”对象的析构函数会在“父”对象的析构函数之前调用。但是,当我执行这段代码时,输出是:
Goodbye!
Engine destructor executing...
Writing config data...
所以问题是:为什么“子”对象析构函数在“父”对象析构函数之后执行?
【问题讨论】:
-
如果成员在进入包含类的析构函数之前被销毁,包含类的析构函数将无法对它们做任何事情。
-
代码中的父子关系在哪里?
-
@jamesdlin 我明白了,这很清楚为什么。对于非初学者来说似乎很明显,事后看来,当然。我可以问为什么不将您的评论作为答案吗?
-
@Someprogrammerdude 那篇文章确实解释了破坏的顺序,但没有解释为什么,这是我的问题
标签: c++ object destructor