【发布时间】:2017-01-27 08:25:22
【问题描述】:
我有三门课
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?
【问题讨论】:
-
−1 这不是真正的代码。除了阻止编译的遗漏之外,我们不知道您还遗漏了什么。
-
纯虚函数应该以 a = 0 结尾;
virtual ~A() = 0; -
您有一个链接器错误,而不是编译器错误。此外,代码中的所有析构函数都是虚拟的;覆盖函数是隐式虚函数。
-
您对
~A()和~B()的定义在哪里? -
@SheldonJuncker 请注意,即使是纯虚拟析构函数也需要一个主体。
标签: c++ inheritance virtual-destructor