标签:
并不是所有的类都要定义虚的析构函数.因为在C++中引入虚函数是有代价的.
只要当你需要通过delete ptr删除一个对象的时候,你才需要定义虚的析构函数.
看下面的代码段:
class Base{
public:
Base(int i):m(i){}
virtual void doSomeThing()=0;
private:
int m;
};
class Derived:public Base{
public:
Derived(int v):Base(v){}
void doSomeThing(){
}
};
int main(){
Derived* d = new Derived(11);
d->doSomeThing();
delete d;
}
一切都工作得很好,直到有一天,你学习了设计模式,明白我们要面向接口编程,而不是面向实现编程.于是代码改成这样:
int main(){
Base* d = new Derived(11);
d->doSomeThing();
delete d;
}
于是问题来了,delete的时候是要调用析构函数的,可是我们的析构函数不是虚函数,于是只会调用Base的析构函数
这样派生类就析构不完全,程序里隐含了bug.
标签:
原文地址:http://www.cnblogs.com/hustxujinkang/p/4964870.html