没有虚析构函数的类是危险的

要点10、为什么继承一个没有虚析构函数的类是危险的?

  一个没有虚析构函数的类意味着不能做为一个基类。如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的析构函没有被调用
}   

http://blog.csdn.net/lanbing510/article/details/4774336

posted @ 2018-02-05 17:17  findumars  Views(830)  Comments(0Edit  收藏  举报