为什么 QMainWindow 的析构函数不是虚拟的?如果我从 QMainWindow 继承一个类 MainWindow 并在其上有一些指针属性,我无法使用 MainWindow 的析构函数删除内存。
问问题
1613 次
3 回答
5
QMainWindow 的析构函数是对已经存在的析构函数 ( QWidget::~QWidget()
) 的覆盖,而后者又是对虚拟析构函数 ( virtual QObject::~QObject()
) 的覆盖。因此,QMainWindow::~QMainWindow()
是虚拟的。与普通成员函数相同的规则适用。
于 2012-10-19T18:07:54.033 回答
4
QObject 的析构函数已被声明为虚拟的。QMainWindow 间接派生自 QObject。我相信 QMainWindow 的破坏在这种情况下不需要虚拟。您在删除派生类时是否在 QMainWindow 的析构函数中设置了断点?
于 2012-10-19T15:16:00.107 回答
0
这是 Qt 中的一个缺陷(未能遵守 CBP);最好的做法是在所有派生类中始终保留修饰符,尤其是虚拟修饰符,以避免此类问题。
不继承虚拟声明意味着,作为用户,我不仅要查找类,还要查找它的所有父类,以确保我要覆盖的方法是否是虚拟的。开发人员的一点懒惰花费了我很多时间。
关于“可维护性”的争论是无关紧要的;它使该类更难使用(用户将比维护者多得多……)
于 2013-02-13T22:46:57.973 回答