2017-03-26 7 views
0

Qtでは、親オブジェクトがその子オブジェクトの所有権を取得することがわかりました。しかし、自分のクラスがQtクラスから派生している場合は、派生クラスのデストラクタでメモリを制御する必要がありますか、Qtでそれを行いますか?以下の例は以下のとおりです。Qtクラスから派生したユーザ定義クラスのメモリの所有者

#include <QWidget> 
#include <QPushButton> 

class MyWidget: public QWidget{ 

public: 
    MyWidget(QWidget* parent = 0): QWidget(parent) { 
     this->setAttribute(Qt::WA_DeleteOnClose); 
     m_button = new QPushButton(this); 
    } 

    ~MyWidget() { delete m_button; } // do I need this to prevent leaks? 

private: 
    QPushButton* m_button; 

} 

だから私の質問、私はメモリリークを防ぐために~MyWidget()が必要なのですか?または、QWidgetはどういうわけか私のためにメモリを管理しますか?

答えて

3

いいえ、QObjectはそれを処理しません。親子ツリー内にある限り、派生したものはすべて収集されます。 QWidgetQObjectを継承し、QWidgetを継承します。あなたはすべてセットされています。

QObjectを継承しない多くのQtタイプが存在することに注意してください。確実に文書を見てください。

関連する問題