5

可能重复:
Qt 中的内存管理?

我一直在学习 Qt,并且讨论过是否应该删除指向 Q 对象(例如 QLabel)的指针。Qt 是否对指向 Qt 对象的指针进行自动内存管理,还是必须手动删除它们?

前任)

#include <QApplication>
#include <QLabel>

int main(int argc, char *argv[])
{

 QApplication app(argc, argv);

 QLabel *label = new QLabel("Im Tough.");

 label->show();

 int result = app.exec();

 //would this be necessary or would QT handle this automatically?
 delete label;

 return result;
}
4

2 回答 2

6

如果对象有父对象,则不需要释放它——它将由 QT 内存管理系统自动完成。

在您的具体示例中,您确实需要删除您的对象,因为它没有父对象。即使您不这样做,app.exec();返回时也会由您的操作系统完成。


从有关qt 对象树的文档中:

QObjects 在对象树中组织自己。当您使用另一个对象作为父对象创建 QObject 时,它会添加到父对象的 children() 列表中,并在父对象存在时被删除。

于 2013-01-09T06:08:45.740 回答
4

如果 QLabel 有父级,它将在其父级删除时被删除,否则你应该自己做。更多:http ://doc.qt.digia.com/qt/objecttrees.html

于 2013-01-09T06:01:06.227 回答