源自Qt类

时间:2017-03-26 08:35:16

标签: c++ qt memory-management

我知道,在Qt中,父对象拥有其子对象的所有权。但是,如果我有自己的类派生自Qt类,我是否需要在派生类的析构函数中控制内存,或者Qt是否为我执行此操作?以下是一个例子:

#include <QWidget>
#include <QPushButton>

class MyWidget: public QWidget{

public:
    MyWidget(QWidget* parent = 0): QWidget(parent) {
        this->setAttribute(Qt::WA_DeleteOnClose);
        m_button = new QPushButton(this);
    }

    ~MyWidget() { delete m_button; } // do I need this to prevent leaks?

private:
    QPushButton* m_button;

}

所以我的问题是,我是否需要~MyWidget()来防止内存泄漏?或者QWidget会以某种方式为我管理记忆吗?

1 个答案:

答案 0 :(得分:3)

不,不,QObject处理。只要它在父子树中,就会收集所有派生的东西。 QWidget继承QObject,您继承QWidget。所以你们都准备好了。

请注意,仍有许多Qt类型不会继承QObject。更好地看待文档是肯定的。