我们是否需要一个虚拟析构函数用于将在Qt-way中使用的类:set QObject
- parent将调用QObject的析构函数deleteLater()
或类似于任何对象的类它被设为父母?
例如:
class MyWidget : public QWidget {
public:
MyWidget() {
w = new QWidget(this);
// "w" will be deleted automatically by parent MyWidget::QWidget::QObject's destructor afaik
}
private:
QWidget *w;
}
我们是否需要MyWidget
类的虚拟析构函数才能继承它?我认为没有理由这样做,因为它不会删除任何内容,并且将从 MyWidget :: QWidget :: QObject 的析构函数中删除派生自QObject
的类的每个属性。 / p>
答案 0 :(得分:5)
如果您添加或不添加它并不重要,因为QObject
继承的QWidget
具有虚拟析构函数,并且它会在整个层次结构中传播。
答案 1 :(得分:3)
您不需要显式编写(空)virtual
析构函数,因为QWidget
已将其析构函数标记为virtual
,因此类层次结构的所有析构函数都自动{ {1}}。
但是一般来说,如果你编写一个将继承的类(并且还没有一个带有virtual
析构函数的基类),那么总是指定一个virtual
析构函数,否则,如果有人试图通过基类类型的指针来破坏类层次结构的对象,那么事情就会严重破坏。