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

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了没有虚析构函数的类是危险的相关的知识,希望对你有一定的参考价值。

要点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

以上是关于没有虚析构函数的类是危险的的主要内容,如果未能解决你的问题,请参考以下文章

C++的虚函数表和虚析构

多态中的虚析构函数

关于虚析构函数的作用和使用

为啥纯虚析构函数需要实现

虚析构函数

C++ 类的多态四(虚析构函数的重要性)