【问题标题】:C++ QT Memory Allocation [duplicate]C ++ QT内存分配[重复]
【发布时间】:2012-12-23 03:14:46
【问题描述】:

可能重复:
Memory management in 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;
}

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

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

    【讨论】:

    • 所以如果我这样做:Qlabel *label = new Qlabel("str");是否需要手动删除指针?
    • @Unit978,是的,因为 label 没有父级。
    【解决方案2】:

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

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


    来自关于qt's object trees 的文档:

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

    【讨论】:

    • 值得一提的是:子元素只有在父元素被删除时才会被删除。
    猜你喜欢
    • 2011-06-23
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 2021-09-20
    相关资源
    最近更新 更多