[英]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.