码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-02-05 18:38:26      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:class   new   tail   delete   为什么   csdn   没有   vector   ring   

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

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

标签:class   new   tail   delete   为什么   csdn   没有   vector   ring   

原文地址:https://www.cnblogs.com/findumars/p/8418521.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!