對于QWidget
同時包含QWidget
成員變數和非小部件成員變數的自定義類,撰寫類的解構式的正確方法是什么?例如,我有
class CustomWidget: public QWidget {
Q_OBJECT
public:
QWidget* x_widget;
SomeOtherClass* x_non_widget;
}
并在創建時將其父級設定為x_widget
,this
我應該如何撰寫解構式?我應該只放入delete x_non_widget
解構式嗎?
uj5u.com熱心網友回復:
QWidget
繼承自QObject
,因此如果設定了其父物件,則當父物件被銷毀時,該物件將自動洗掉。由于您設定this
為父級,因此洗掉父級實體x_widget
時子級會自動洗掉。CustomWidget
所以在這種情況下不需要解構式。
但是請注意,如果您將一個小部件放入布局中,那么它會被重新設定為(如果它已經有一個父級)到包含該布局的小部件。但我想這不是你的情況。
如果您的非小部件物件是從中派生的,QObject
那么您也可以設定其父物件。然后你不需要在解構式中洗掉它,因為它會像小部件一樣被自動洗掉。
如果您的非小部件不是源自或QObject
您不想為其設定父級(出于任何原因,例如您將其移動到執行緒),那么您可以將其包裝在一些擁有/強智能指標中,例如std::unique_ptr
,std::shared_ptr
或QScopedPointer
. 然后它將通過智能指標自動洗掉。您也不需要在解構式中洗掉它。
只有當您不想將其包裝在任何此類擁有/強智能指標中時,您才需要在解構式中手動將其洗掉。
PS:除了您的問題之外,對于從您繼承的指標保留的非擁有成員QObject
也可以從 using 中受益QPointer
,這是一個非常方便的類,可確保在代碼中的任何位置洗掉物件時自動使指標無效。所以不再有指向已洗掉QObject
s的無效指標......但與擁有/強智能指標不同,QPointer
它不能確保自動洗掉物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/513285.html
標籤:qt