Qt 对象的 Qt 内存管理



我知道有很多关于qt内存管理的问题,但我找不到答案。

因此,对于 qt 小部件,如果您在创建对象时将 this(这是父小部件)作为参数传递,则父小部件将获得它的所有权并在父小部件死亡时将其删除。当您将微件添加到布局并在微件上设置该布局时,也会发生同样的事情。

但是,例如,如果我声明指向 QColor 对象的指针会发生什么?Q不能添加为另一个小组件的子项,也不能添加到布局中。当小部件死亡或我需要在析构函数中手动删除它时,内存是否会释放?

这里有一个例子...当小部件被销毁时m_pColor会发生什么?它会被销毁还是会有内存泄漏?很抱歉代码中的任何错误,我没有编译它,我只是在这里作为示例编写它。

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
class QHBoxLayout;
class QPushButton;
class QColor;
class Widget : public QWidget
{
    Q_OBJECT
public:
    Widget( QWidget *parent = NULL );
public:
    QHBoxLayout *m_pLayout;
    QPushButton *m_pButton;
    QColor *m_pColor;
};
#endif // WIDGET_H

#include "widget.h"
#include <QHBoxLayout>
#include <QPushButton>
#include <QColor>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    m_pLayout = new QHBoxLayout;
    m_pButton = new QPushButton( tr( "Button" ) );
    m_pLayout->addWidget( m_pButton );
    m_pColor = new QColor(0, 0, 0, 255);
    setLayout( m_pLayout );
}

您建议的内容仅对继承QObject的类有效(即将QObject作为其超类之一)。这些属性不适用于其他类(甚至内置Qt)。由于QColor不是QObject的子类,m_pColor引用的对象在销毁Widget时不会被销毁。您必须手动执行此操作。

父小部件没有用于销毁m_pColor的参考。 您可以使用 Valgrind 检查此可执行文件上的内存泄漏。

最新更新