我看過Qt的圖形用戶界面類似下面的語法所有的地方:將被銷燬如果從QObject派生的類的構造函數拋出?
myDialog::myDialog(QWidget *parent, Qt::WFlags flags):QDialog(parent, flags)
{
QPushButton *button = new QPushButton("&Download", this);
QVBoxLayout *layout = new QVBoxLayout(this);
//something that can throw here
layout ->addWidget(button);
setLayout(layout);
}
我一直想知道這是否可以在出現異常的情況下泄露,因爲「這個」我給的父母按鈕和佈局未完全構建,因此它可能不會摧毀其子項。
我在MSVC2010 Qt4.8.3中試過了,它看起來像一旦完全創建基類QObject類(當然首先完成),可以將「this」傳遞給構造函數中的其他對象,他們將被正確銷燬。
我還沒有在Qt文檔中發現保證這一點的位置,但是有人可以指向我,所以我可以保證這在將來不會改變?
如果myDialog的構造函數拋出,QObject的析構函數將不會被調用。原代碼會有泄漏。 –
我不認爲這是正確的。基類的析構函數仍應該被調用。 http://stackoverflow.com/questions/3759270/will-the-destructor-of-the-base-class-called-if-an-object-throws-an-exception-in – Phlucious
你是對的。感謝您指出。 –