您的位置:首页 > 其它

虚析构函数

2009-03-31 10:13 295 查看
 一个没有虚析构函数的类意味着不能做为一个基类。如std::string,
  std::complex, 和 std::vector 都是这样的。为什么继承一个没有虚析构函数的
  类是危险的?当你公有继承创建一个从基类继承的相关类时,指向新类对象中的指
  针和引用实际上都指向了起源的对象。因为析构函数不是虚函数,所以当你delete
  一个这样的类时,C++就不会调用析构函数链。举个例子说明:
  
  class A
  {
   public:
   ~A() // 不是虚函数
   {
   // ...
   }
  };
  class B: public A //错; A没有虚析构函数
  {
   public:
   ~B()
   {
   // ...
   }
  };
  
  int main()
  {
   A * p = new B; //看上去是对的
   delete p; //错,B的析构函没有被调用
  }

ps:如果删除基类指针,则需要运行基类虚构函数并清除基类的成员,如果对象实际是派生类型的,则没有定义该行为,要保证运行适当的析构函数,基类中的析构函数必须为虚析构函数!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: