class A{
public:
int _a;
A(int a) :_a(a){};
};
class B{
A* _ap;
public:
B(A& a){
_ap = &a;
}
~B(){
//这里并不执行什么,但是_ap仍然被delete了。
};
};
void main(){
A* a = new A(1);
B b(*a);
delete &b;
cout << a->_a;
}
是不是不管你析构函数写的什么,都一定会delete掉其所有的成员变量?
绝对不可能。
另外,
b
不是new出来的,把它delete
掉的结果是未定义的。以上两种可以说都是fatal error!!!
因为前者会导致内存泄漏
后者会导致你的程序在某个神奇的时刻以一种神奇的方式crash掉,而且在crash掉之后你基本上很难发现其中隐含的奥秘。