龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

Bjarne:为何析构函数默认不是virtual[图]

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
因为很多类并不是被设计作为基类的。只有类在行为上是它的派生类的接口时(这些派生类往往在堆中分配,通过指针或引用来访问),虚拟函数才有意义。 那么什么时候才应该将析构函

  因为很多类并不是被设计作为基类的。只有类在行为上是它的派生类的接口时(这些派生类往往在堆中分配,通过指针或引用来访问),虚拟函数才有意义。
  
  那么什么时候才应该将析构函数定义为虚拟呢?当类至少拥有一个虚拟函数时。拥有虚拟函数意味着一个类是派生类的接口,在这种情况下,一个派生类的对象可能通过一个基类指针来销毁。例如:
  
   class Base {
   // ...
   virtual ~Base();
  };
  
  class Derived : public Base {
   // ...
   ~Derived();
  };
  
  void f()
  {
   Base* p = new Derived;
   delete p; // 虚拟析构函数保证~Derived函数被调用
  }
  
  
  假如基类的析构函数不是虚拟的,那么派生类的析构函数将不会被调用――这可能产生糟糕的结果,例如派生类的资源不会被释放。 更多内容请看Virtual专题,或
  
精彩图集

赞助商链接