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