Reputation: 773
Why the QMainWindow's destructor is not virtual? If I inherit a class MainWindow from QMainWindow and have some pointer attribute on it I can't delete the memory using MainWindow's destructor.
Upvotes: 2
Views: 1990
Reputation: 438
This is a defect in Qt (failure to adhere to CBP); it is best practice to always carry-over modifiers, especially virtual, in all derived classes, exactly to avoid this kind of problem.
NOT carrying-over the the virtual declaration means that, as a user, I have to not just lookup the class, but also ALL it's parents, to make sure the method(s) I want to override are virtual or not. A little laziness by the developers costs me lots of time.
Arguments about 'maintainability' are irrelevant; it makes the class harder to use (there will be many, MANY more users than maintainers...)
Upvotes: 0
Reputation: 51920
QMainWindow's destructor is an override of an already existing destructor (QWidget::~QWidget()
) which in turn is an override of a virtual destructor (virtual QObject::~QObject()
). Thus, QMainWindow::~QMainWindow()
is virtual. The same rules apply as with normal member functions.
Upvotes: 6
Reputation: 476
QObject's destructor has been declared as virtual. QMainWindow is derived from QObject indirectly. I belive QMainWindow's destruct does not need virtual in this case. Did you set breakpoint in QMainWindow's destructor while deleting your derived class?
Upvotes: 4