C++,如果类A有一个类B的成员,那么类A的析构函数代码中需要显示写上类B的析构函数吗?
3个回答
展开全部
我想你的问题应该是, 需要显式调用 B的析构函数吗? 是这样吧?
如果是:
简单的回答是:
不用.
详细点的回答是:
类B的成员 在 类A对象 析构时 会自己处理自己的资源情况.
即使A中是B的指针, 如果不是A中 new 的话(传进来的), 也不用
如果 是B的指针, 并且 在A中 new B(A申请的资源), 那一般情况下, 肯定需要 在A的析构函数中 处理(delete b;); 但是, 但是, 但是, 不应该显式调用B的析构函数. (这种情况下应该也要提供 复制构造函数 和 赋值操作符)
============
除了一种情况下. 任何时候都不应该 显式调用 一个类的析构函数:
就是用了 placement new 的时候.
个人理解, 如有错误, 请大家指正.
展开全部
//不用了!!!!自动调用类成员的析构, 不过你写上不报错,只不过多次一举 。
#include<iostream.h>
class B
{
int i;
public:
B(int x){ i = x ; cout <<"新建 B" ;}
~B()
{
cout<< "关闭B";
}
};
class A
{
int hh;
B b1;//类B成员
public:
A( int x , int y) : b1(y)
{
hh = x;
cout<< "新建A";
}
~A()
{
cout<< "关闭A";
//b1.~B();//合法 但是多次一举。
}
};
int main()
{
A good(1 , 2);
return 0;
}
//我很肤浅的 请批评指正 回复下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
然而你会发现你并不知道如何写出显式析构函数调用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询