qtメモリ管理に関して多くの質問があることは知っていますが、私の答えは見つかりませんでした。
したがって、qtウィジェットの場合、オブジェクトの作成時にこれ(親ウィジェット)をパラメーターとして渡すと、親ウィジェットがその所有権を取得し、親が死んだときに削除します。ウィジェットをレイアウトに追加し、そのレイアウトをウィジェットに設定した場合も同じことが起こります。
しかし、たとえばQColorオブジェクトへのポインターを宣言するとどうなりますか?QColorを別のウィジェットの子として追加したり、レイアウトに追加したりすることはできません。ウィジェットが停止したとき、またはデストラクタで手動で削除する必要があるときに、メモリは解放されますか?
ここに例があります...ウィジェットが破棄されると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 );
}