前言
这学期开了专业课Qt,第一次接触到C++,在C++中学习过程中,我们都知道:
delete 和 new 必须 配对使用(一 一对应):delete少了,则内存泄露,多了麻烦更大。
Qt作为C++的库,显然是不会违背C++的前述原则的。可是:
在Qt中,我们很多时候都疯狂地用new,却很少用delete,缺少的 delete 去哪儿了?!
本文整理了C++中关于delete和new的知识点。
Qt半自动的内存管理
在Qt中,以下情况下你new出的对象你可以不用 亲自去delete (但你应该清楚delete在何处被Qt调用的,怎么被调用的):
QObject及其派生类的对象,如果其parent非0,那么其parent析构时会析构该对象(本文内容围绕这一点展开 )
除此之外,有些类的对象可以接收设置一些特别的标记,比如:
QWidget及其派生类的对象,可以设置 Qt::WA_DeleteOnClose 标志位(当close时会析构该对象)
QAbstractAnimation派生类的对象,可以设置 QAbstractAnimation::DeleteWhenStopped
QRunnable::setAutoDelete()
MediaSource::setAutoDelete()
…
注意:这些用法会有些陷阱 ,请注意看本文最后的3个小例子。
在Qt中,最基础和核心的类是: