码迷,mamicode.com
首页 > 其他好文 > 详细

为什么需要定义虚的析构函数?

时间:2015-11-14 19:26:20      阅读:294      评论:0      收藏:0      [点我收藏+]

标签:

并不是所有的类都要定义虚的析构函数.因为在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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!