内部类析构函数在基类析构函数之后被调用

结尾

我有一个基本而简单的问题。

我有这种情况:

#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;
[...]

感谢您的帮助

埃雷里卡

这是正常现象吗?

是的。子对象析构函数由容器类的析构函数调用。特别是,在执行完容器类析构函数的主体之后,将销毁子对象。

因为某些功能的功能已在我的基类析构函数中销毁,并且内部类依赖于它们。

如果内部类[sic]析构函数依赖于Base包含它们实例,那只会是一个问题在这种情况下,要么Base不应该将它们包含为成员,要么它们的析构函数不应依赖Base

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章