C++ C++;虚析构函数定义
我有三节课C++ C++;虚析构函数定义,c++,inheritance,virtual-destructor,C++,Inheritance,Virtual Destructor,我有三节课 class A { // pure virtual funcs and member vars virtual ~A(); } class B : public A { // some more pure virtual funcs virtual ~B(); } class C : public B { // concrete implementations ~C() {} } 目前,这不会使用“未定义的对`typeinfo
class A {
// pure virtual funcs and member vars
virtual ~A();
}
class B : public A {
// some more pure virtual funcs
virtual ~B();
}
class C : public B {
// concrete implementations
~C() {}
}
目前,这不会使用“未定义的对`typeinfo'的引用”错误编译(~B()未定义,很容易修复),但是我想知道是否只是定义了`virtual~B{}'是正确的做法还是~C应该是虚拟的并定义好了,所以对~B的调用被分派到~C?假设这个问题是关于一个纯虚拟析构函数的(代码不是真实的,所以很难说,但您谈论的是缺少的析构函数定义,以及纯虚拟的): 必须定义可以调用的纯虚拟析构函数 不能在类定义中定义它 没有明确的理由说明为什么必须在类定义之外定义它,除了Bjarne Stroustrup(语言创建者)的一条旧注释,他认为
=0
表示“无主体”
例如
struct S
{
virtual ~S() = 0;
};
S::~S() {}
−1这不是真正的代码。我们不知道你还遗漏了什么,除了那些妨碍编译的遗漏<代码>虚拟~A()=0代码>您有链接器错误,而不是编译器错误。而且,代码中的所有析构函数都是虚拟的;重写函数是隐式虚函数。你对
~A()
和~B()
的定义在哪里?@SheldonJuncker注意,即使是纯虚析构函数也需要一个体。为什么我们不能在类定义(抽象类A
)中将其定义为空析构函数?@πάνταῥεῖ: 不,我的意思是在类定义中。“如果你把它定义为一个空的析构函数,那么它就不再是纯虚拟的。你在哪里看到提到纯虚拟析构函数的OP?@Cheers and hth.-Alf:asπνταῥεῖ 写(没有提到纯虚拟析构函数;相当抽象);我们不考虑一个抽象类(其他)纯虚拟方法吗?在这种情况下,我们可以提供析构函数的空定义,同时保持类的抽象性。