【发布时间】:2021-09-01 19:27:15
【问题描述】:
来自this post这里,一般来说:
所有 QObject 都会自动删除它们自己的子对象。 (看 docs 这里。)QWidgets 是 QObjects。所以只要你建立一个 父/子关系,您不需要手动删除您的 对象。为此,只需将指向父对象的指针传递给 构造函数:
QLabel *label1 = new QLabel; // <<- NEED TO DELETE QLabel *label2 = new QLabel(some_parent_obj); // Will be deleted when some_parent_obj is deleted
所以出现了一些问题:
- 每个小部件都需要需要/需要父级吗?如果不是,有哪些例外?如果是,那么 没有 父级的小部件会发生什么情况?
我问这个是因为从 Qt Docs 中的示例中,一些示例小部件有父级 (QLabel example),但有些没有(QBarChart example,还有QFont、QColor 等...)。
所以我想知道是否有例外,或这些小部件不需要任何父母,或如果我出于某种原因使用new 声明它们, 之后我必须delete。
反之亦然……
- 没有父级保证的小部件是否会在其所在的小部件(不一定是其父级)被删除时导致内存泄漏(或类似情况)?或者如果它从布局中删除而没有发生任何删除?
因为根据我的代码经验,我创建了可能相当多(~100)的小部件和其他东西,既没有设置任何父级(也没有在之后使用delete),而且项目似乎运行良好,没有即使在一段时间后也会出现任何停顿(虽然效果可能是潜在的,因为我没有运行 Memcheck),因此这个问题就在这里。
【问题讨论】:
标签: qt memory-management memory-leaks parent-child new-operator