我们在使用C++析构函数一定要加上virtual 关键字,因为在继承的情况下,可以通过基指针直接delele释放类的资源,
否则直接delete基类指针会造成内存泄露,或者自己手动加上类型指针转换后再释放!
class A{
A(){}
~A(){}
}
class B:public A{
B(){}
~B(){}
}
A* pA=new B();
delete pA;//不会调用B的析构函数,只会调用A的析构函数导致内存泄露
//但是可以采用如下方式防止内存泄露
B* pB=dynamic_cast<A*>(pA);//安全的做法是,动态指针转换
if(NULL != pB){
delete pB;
}
//加入virtual 情况就不一样了
class A{
A(){}
virtual ~A(){}
}
class B:public A{
B(){}
virtual ~B(){}
}
A* pA=new B();
delete pA;//不会内存泄露