C ++ Qt基类虚拟析构函数

时间:2015-02-27 13:23:16

标签: c++ qt inheritance destructor

我们是否需要一个虚拟析构函数用于将在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>

2 个答案:

答案 0 :(得分:5)

如果您添加或不添加它并不重要,因为QObject继承的QWidget具有虚拟析构函数,并且它会在整个层次结构中传播。

答案 1 :(得分:3)

您不需要显式编写(空)virtual析构函数,因为QWidget已将其析构函数标记为virtual,因此类层次结构的所有析构函数都自动{ {1}}。

但是一般来说,如果你编写一个将继承的类(并且还没有一个带有virtual析构函数的基类),那么总是指定一个virtual析构函数,否则,如果有人试图通过基类类型的指针来破坏类层次结构的对象,那么事情就会严重破坏。