首页 > 其他 > 详细

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

时间:2015-11-14 19:23:09      阅读:337      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!