Ive visto sintassi GUI Qt come il seguente tutto il luogo:verrà distrutto() essere emesso se il costruttore di una classe derivata da QObject getta?
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);
}
mi sono sempre chiesto se questo può fuoriuscire in caso di un'eccezione perché il "questo" sto dando come un genitore a il pulsante e il layout non sono completamente costruiti in modo che non possano distruggere i suoi figli.
L'ho provato in MSVC2010 Qt4.8.3 e sembra che non appena la classe QObject di base sia completamente creata (cosa che viene fatta prima ovviamente) è ok passare "questo" ad altri oggetti nel costruttore, saranno distrutti correttamente.
Non ho trovato il punto nei documenti Qt a garantirlo, ma qualcuno può indicarmi di farlo quindi ho la certezza che questo non cambierà in futuro?
Il distruttore di QObject non verrà chiamato se il costruttore myDialog genera. Ci sarà una perdita con il codice originale. –
Non penso sia corretto. Il distruttore della classe base dovrebbe ancora essere chiamato. http://stackoverflow.com/questions/3759270/will-the-destructor-of-the-base-class-called-if-an-object-throws-an-exception-in – Phlucious
hai di nuovo ragione. Grazie per la segnalazione. –