qtメモリ管理に関して多くの質問がありますが、私は私の答えを見つけることができませんでした。QtオブジェクトのQtメモリ管理
したがって、qtウィジェットでは、これを(親ウィジェットである)オブジェクト作成時のパラメータとして渡すと、親ウィジェットはその所有権を取得し、親が消滅したときにそれを削除します。 レイアウトにウィジェットを追加し、そのレイアウトをウィジェットに設定すると、同じことが起こります。
しかし、たとえばQColorオブジェクトへのポインタを宣言するとどうなりますか? QColorは別のウィジェットの子として追加することも、レイアウトに追加することもできません。ウィジェットが死んだとき、またはデストラクタで手動で削除する必要があるときにメモリが解放されますか?
ここに例...ウィジェットが破棄されると、m_pColorで何が起こりますか?それは破壊されるか、メモリーリークが起こるでしょうか? コードを間違えて申し訳ありません、私はそれをコンパイルしませんでした、私はちょうど例としてここに書いています。あなたが示唆したこと(すなわち、そのスーパークラスの一つとしてQObject
を持つ)のみQObject
を継承するクラスに対して有効である
#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);
}