C++ Qt base class 虚拟析构函数

C++ Qt base class virtual destructor

我们是否需要一个 classes 的虚拟析构函数,它将在 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 class 要被继承,我们需要一个虚拟析构函数吗?我认为没有理由这样做,因为它不会删除任何内容,并且从 QObject 派生的 class 的每个 属性 将从 MyWidget::QWidget:: 中删除QObject的析构函数。

添加与否并不重要,因为 QWidget 继承的 QObject 有一个虚拟析构函数,并且它会传播到整个层次结构。

您不需要显式编写(空)virtual 析构函数,因为 QWidget 已经将其析构函数标记为 virtual,因此 [=20= 的所有析构函数都会自动] 层次结构是 virtual.

但一般来说,如果您编写一个将被继承的 class(并且还没有一个带有 virtual 析构函数的基础 class),请始终指定一个 virtual 析构函数,否则如果有人试图通过基 class 类型的指针破坏您的 class 层次结构中的对象,事情将会严重爆炸。