基类析构函数必须为虚函数否则会造成内存泄漏

https://blog.csdn.net/asd199086/article/details/52206241

(1)基类的的析构函数不是虚函数的话,删除指针时,只有其类的内存被释放,派生类的没有。这样就内存泄漏了。

(2)析构函数不是虚函数的话,直接按指针类型调用该类型的析构函数代码,因为指针类型是基类,所以直接调用基类析构函数代码。

(3)问:啥已经delete p了还能给p赋值啊。。。不解,求高人指点??


答:delete是删除指针p指向的实例,p指针本身依然存在,delete后将p置为空值是常用做法,空值一般写成NULL宏,其实就是0。因为内存0位置是不允许访问的,delete

0操作编译器可以判断是错误操作不会执行,因此将p置为空值0是很安全的做法。

(4)养成习惯:基类的析构一定virtual。

(5)当基类指针指向派生类的时候,如果析构函数不声明为虚函数,在析构的时候,不会调用派生类的析构函数,从而导致内存泄露。

(6)子类对象创建时先调用父类构造函数然后在调用子类构造函数,在清除对象时顺序相反,所以delete p只清除了父类,而子类没有清除。。。

(7)当基类对象的指针或引用调用派生类对象时,如果基类的析构函数不是虚析构函数,则通过基类指针或引用对派生类的析构是不彻底的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文地址:新浪博客 | zjdtc | 虚函数与构造函数、析构函数 | 2011-06-22本文在原文之上,增加了...
    蓝雪冬荷阅读 1,018评论 0 0
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,552评论 1 51
  • 1. 让自己习惯C++ 条款01:视C++为一个语言联邦 为了更好的理解C++,我们将C++分解为四个主要次语言:...
    Mr希灵阅读 2,881评论 0 13
  • 1. C++基础知识点 1.1 有符号类型和无符号类型 当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值...
    Mr希灵阅读 18,043评论 3 82
  • 心 推开了窗 文/兰兰 光透过了心灵的窗口 梦 去流浪 乘风的翅膀 在这里去寻找 可是 你已躲藏 心筑起了厚厚的...
    兰如纯阅读 402评论 0 0