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 层次结构中的对象,事情将会严重爆炸。
我们是否需要一个 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 层次结构中的对象,事情将会严重爆炸。