c++ - 析构函数的问题
迷茫
迷茫 2017-04-17 12:02:28
[C++讨论组]
class A
{
public:
    A()
    {
        ;
    };
    ~A()
    {
        cout<<"~A deconstruct"<<endl;
    }
};

class B:public A
{
public:
    B(A &a):_a(a)
    {
        ;
    };
    ~B()
    {
        cout<<"~B deconstruct"<<endl;
    }
private:
    A _a;
};

int main(){

    A a;
    B b(a);
    return 0;
}

~B deconstruct
~A deconstruct
~A deconstruct
~A deconstruct
请问A的析构函数怎么输出了3次,b销毁时调用一次,a销毁时调一次,不应该是两次吗

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(1)
PHP中文网

因为你在B里面又声明了一个private: A _a; 这也是一个对象,所以你的代码创建了2个a对象,析构了两次,加上B析构时也有一次,共3次。

B(A &a):_a(a)这句代码看,原意可能是想传入a的引用(而不是对象),如果是这样的话, B里的声明应该为:

private:
    A &_a;

这样运行上面的代码,A的析构才是两次。

另外,上面的代码还有一个小问题,A作为一个基类,它的析构函数最好声明为 virtual ~A();以免发生内存泄露。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号