析构函数的问题
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销毁时调一次,不应该是两次吗
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因为你在B里面又声明了一个
private: A _a
; 这也是一个对象,所以你的代码创建了2个a对象,析构了两次,加上B析构时也有一次,共3次。从
B(A &a):_a(a)
这句代码看,原意可能是想传入a的引用(而不是对象),如果是这样的话, B里的声明应该为:这样运行上面的代码,A的析构才是两次。
另外,上面的代码还有一个小问题,A作为一个基类,它的析构函数最好声明为
virtual ~A();
以免发生内存泄露。