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

Vic*_*voy 5 c++ inheritance qt 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;
}
Run Code Online (Sandbox Code Playgroud)

MyWidget如果要继承该类,我们是否需要虚拟析构函数?我认为没有理由,因为它不会删除任何内容,并且派生自该类的每个属性QObject将从MyWidget :: QWidget :: QObject的析构函数中删除。

Bog*_*dan 5

如果您添加或不作为不要紧,QObject继承了QWidget具有虚拟析构函数,这是通过整个层次传播。


Mat*_*lia 4

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

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