简体   繁体   English

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

[英]C++ Qt base class virtual destructor

Do we need a virtual destructor for a classes which are gonna be used in Qt-way: set QObject -parent which will call in QObject's destructor deleteLater() or something like that for any object for which it was set as parent? 我们是否需要一个用于Qt-way的类的虚拟析构函数:设置QObject -parent,它将调用QObject的析构函数deleteLater()或者类似于它被设置为父类的任何对象?

For example: 例如:

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;
}

Do we need a virtual destructor for MyWidget class if it is gonna be inherited? 我们是否需要MyWidget类的虚拟析构函数才能继承它? I see no reason for this because it does not delete anything and each property of the class which is derived from QObject will be deleted from MyWidget::QWidget::QObject 's destructor. 我没有理由这样做,因为它没有删除任何内容,并且从QObject派生的类的每个属性都将从MyWidget :: QWidget :: QObject的析构函数中删除。

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

You don't need to explicitly write an (empty) virtual destructor because QWidget already marks its distructor as virtual , so automatically all destructors of the class hierarchy are virtual . 您不需要显式编写(空) virtual析构函数,因为QWidget已将其析构函数标记为virtual ,因此类层次结构的所有析构函数都是virtual

But in general, if you write a class that is going to be inherited (and doesn't already have a base class with a virtual destructor), always specify a virtual destructor, otherwise things will blow up badly if anyone tries to destroy an object of your class hierarchy through a pointer of the base class type. 但一般来说,如果你编写一个将要继承的类(并且还没有带有virtual析构函数的基类),那么总是指定一个virtual析构函数,否则如果有人试图销毁一个对象,事情就会严重破坏您的类层次结构通过基类类型的指针。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM