从 Qt 类派生的用户定义类中的内存所有权

Ownership of memory in user-defined classes deriving from Qt classes

本文关键字:内存 所有权 定义 用户 派生 Qt      更新时间:2023-10-16

我知道,在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以某种方式为我管理内存?

不,你没有,QObject处理这个问题。只要派生的所有内容都在父子树中,就会被收集。 QWidget继承QObject,你继承QWidget。所以你都准备好了。

请注意,仍然有许多Qt类型不继承QObject。最好看看文档以确定。