Qt对象的Qt内存管理

Jac*_*ieg 5 qt memory-leaks memory-management

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

因此对于qt小部件,如果在创建对象时将此传递(父小部件)作为参数传递,则父小部件将获取它的所有权并在父级死亡时将其删除.将小部件添加到布局并在小部件上设置该布局时,会发生同样的情况.

但是,如果我声明一个指向QColor对象的指针,会发生什么?QColor无法作为其他窗口小部件的子窗口添加,也无法添加到布局中.当窗口小部件死亡或我需要在析构函数中手动删除内存时,是否会释放内存?

这里有一个例子......当Widget被销毁时,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
Run Code Online (Sandbox Code Playgroud)
#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 );
}
Run Code Online (Sandbox Code Playgroud)

UmN*_*obe 6

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