析构函数上的虚拟传播
Virtual propagation on destructor
我知道 virtual
传播到派生的 class 方法,并且可以选择将 as 关键字放在派生的 class 的方法声明中,我知道我必须标记作为virtual
基class的析构函数,为了多态析构,但我想知道的是如果派生class的默认析构函数,继承virtual
来自基础 class 的虚拟析构函数,所以我必须在派生的 class.
上显式地写它
示例:
class A{
public:
virtual ~A() override = default;
}
class B: public A{
public:
// have i to write this or it's already what the compiler get as default?
virtual ~B() override = default;
}
是,一旦成员函数(包括析构函数)在基础 class 中被标记为 virtual
,它在所有派生的 class 中仍然是 virtual
。
您可以在 ~B()
声明中省略关键字 virtual
,如果 ~B()
为空,甚至可以完全省略。
派生 class 的析构函数,尽管其名称与基 class 的析构函数不同, 覆盖 基 class 析构函数。就像任何其他覆盖一样,如果它覆盖的是虚拟的,那么它就是虚拟的。
我知道 virtual
传播到派生的 class 方法,并且可以选择将 as 关键字放在派生的 class 的方法声明中,我知道我必须标记作为virtual
基class的析构函数,为了多态析构,但我想知道的是如果派生class的默认析构函数,继承virtual
来自基础 class 的虚拟析构函数,所以我必须在派生的 class.
示例:
class A{
public:
virtual ~A() override = default;
}
class B: public A{
public:
// have i to write this or it's already what the compiler get as default?
virtual ~B() override = default;
}
是,一旦成员函数(包括析构函数)在基础 class 中被标记为 virtual
,它在所有派生的 class 中仍然是 virtual
。
您可以在 ~B()
声明中省略关键字 virtual
,如果 ~B()
为空,甚至可以完全省略。
派生 class 的析构函数,尽管其名称与基 class 的析构函数不同, 覆盖 基 class 析构函数。就像任何其他覆盖一样,如果它覆盖的是虚拟的,那么它就是虚拟的。