我有三个类
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()没有定义,很容易修复),但我想知道如果只是定义'虚拟的~B{}'是正确的事情要做或是否~C应该是虚拟的和定义的,所以调用~B被分派到~C?
假设这个问题是关于纯虚析构函数的(代码不是真实的,所以很难说,但是你在谈论一个缺失的析构函数定义,以及纯虚函数):
必须定义可调用的纯虚析构函数。
不能在类定义中定义。
没有明确的理由说明为什么必须在类定义之外定义它,除了Bjarne Stroustrup(语言创建者)的一个老注释,他认为= 0
指示了“no body”
的例子。
struct S
{
virtual ~S() = 0;
};
S::~S() {}