我想你的问题应该是, 需要显式调用 B的析构函数吗? 是这样吧?
如果是:
简单的回答是:
不用.
详细点的回答是:
类B的成员 在 类A对象 析构时 会自己处理自己的资源情况.
即使A中是B的指针, 如果不是A中 new 的话(传进来的), 也不用
如果 是B的指针, 并且 在A中 new B(A申请的资源), 那一般情况下, 肯定需要 在A的析构函数中 处理(delete b;); 但是, 但是, 但是, 不应该显式调用B的析构函数. (这种情况下应该也要提供 复制构造函数 和 赋值操作符)
============
除了一种情况下. 任何时候都不应该 显式调用 一个类的析构函数:
就是用了 placement new 的时候.
个人理解, 如有错误, 请大家指正.
//不用了!!!!自动调用类成员的析构, 不过你写上不报错,只不过多次一举 。
#include
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;
}
//我很肤浅的 请批评指正 回复下
然而你会发现你并不知道如何写出显式析构函数调用