【发布时间】:2016-04-27 15:55:17
【问题描述】:
我有一个基本而简单的问题。
我有这种情况:
#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;
}
我的控制台现在告诉我:
调用基础析构函数
调用 Inner2 析构函数
调用了 Inner1 析构函数
这是正常行为吗?因为某些功能的功能
在我的基类析构函数中已经被销毁,内部类依赖
在他们身上。
不推荐的解决方法:
只需在第一个位置添加一个带有对象的“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;
[...]
感谢您的帮助
【问题讨论】:
-
您应该向我们展示生成这些消息的代码。否则我们只是在猜测行为。
-
那不是子类而是内部类。子类化是指继承。 那么派生类的dtors会在基类析构函数之前被调用。
-
这些消息只是我添加到每个析构函数中的标准 cout 消息,没什么特别的。它只是关于这种情况和标准 c++ 我认为它与我的其他代码无关。
-
请提供MCVE代码
-
@Albjenow 这说这对于内部类来说是正常的?
标签: c++ c++11 destructor