美文网首页
基类析构函数必须为虚函数否则会造成内存泄漏

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

作者: YouR丶Beautiful | 来源:发表于2018-05-24 11:36 被阅读0次

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

相关文章

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

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

  • ★03.关于单继承

    基类总是要写虚析构函数 通过设置析构函数为纯虚函数来让类称为抽象基类 代码 函数virtual属性的传递性 拷贝移...

  • 2.0 C++远征:虚析构函数

    2-4虚析构函数 [TOC] 1.为什么引进虚析构函数? 多态中存在的问题:内存泄漏。为了解决内存泄漏的问题,引入...

  • 2020-02-10 C++基础2

    1:为什么析构函数必须是虚函数?为什么C++默认的析构函数不是虚函数? 将可能会被继承的父类的析构函数设置为虚...

  • c++primer 15.24-15.30

    15.24基类一般定义一个虚析构函数但是虚析构函数会阻止移动操作但是虚析构函数会帮助基类派生类体系动态销毁对象15...

  • C++总结

    函数 为什么基类的析构函数用虚函数 在实现多态时,当用基类操作派用类,在析构时防止只析构基类而不析构派生类的状况发...

  • C++虚函数的一些奇怪问题总结

    构造函数能否为虚函数?在构造函数中调用虚函数会如何?析构函数能否为虚函数?析构函数能否为纯虚函数?其实日常开发中基...

  • C++中基类的析构函数为什么要用virtual虚析构函数(转)

    只要是基类,就要将析构函数设置为虚函数,否则,当将基类指针指向子类的对象时,delete基类指针不会调用子类的析构...

  • 警告:deleting object of polymorphi

    原来如果基类里有虚函数,定义了基类指针指向派生类,就会需要定义基类虚析构,这样,基类指针析构的时候,就会先析构派生...

  • 虚析构函数的作用与理解

    基类的析构函数一般都会被声明成虚函数,原因是,若是不设置成虚函数,在实现多态时,将子类对象赋给基类指针,在析构的过...

网友评论

      本文标题:基类析构函数必须为虚函数否则会造成内存泄漏

      本文链接:https://www.haomeiwen.com/subject/rnojjftx.html