QT内存泄漏

编程知识 更新时间:2023-05-01 23:51:16

Qt的半自动化的内存管理

(1)QObject及其派生类的对象,如果其parent非0,那么其parent析构时会析构该对象。

(2)QWidget及其派生类的对象,可以设置 Qt::WA_DeleteOnClose 标志位(当close时会析构该对象)。

(3)QAbstractAnimation派生类的对象,可以设置 QAbstractAnimation::DeleteWhenStopped。

(4)QRunnable::setAutoDelete()、MediaSource::setAutoDelete()。

(5)父子关系:父对象、子对象、父子关系。这是Qt中所特有的,与类的继承关系无关,传递参数是与parent有关(基类、派生类,或父类、子类,这是对于派生体系来说的,与parent无关)。


在使用QT的时候,我们一般会在类的构造函数中new出很多对象,这些对象会在什么时候被delete呢?

       

       之前一直有一个错误的理解:认为对象在被销毁时QT会自动回收其构造函数new出来的成员。直到最近使用valgrind工具检测内存泄漏时发现,有些堆中的数据并没有被delete。

       这些数据包括:1.在构造函数被new出来,但是没有指定parent的对象                                   (需要在虚构函数手动 delete)

                               2.在构造函数中QAbstractAnimation派生类,虽然指定了parent但是Qt依然没有回收 (需要在虚构函数手动 delete)

                                   3.非构造函数new出来的数据,没有在相应的地方delete          (需要在虚构函数或其他地方手动 delete)

       以上三种情况是我们写程序时经常遇到的,稍微不注意就会引起内存泄漏。


使用valgrind检测程序内存泄漏方法:

       valgrind  --tool=memcheck --leak-check=full  ./yourprogram  &> outputfile

       关于valgrind的其他使用方法请自行百度。

更多推荐

QT内存泄漏

本文发布于:2023-04-24 15:07:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/a1d522e1419efdbba128e3717b82e378.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:内存   QT

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 100904文章数
  • 26077阅读数
  • 0评论数