我忘记了C++。从记忆中,如果我有虚函数,就应该有虚析构函数。所以我写了下面的代码。但是,我会收到关于B析构函数的链接器错误(但不是A)。
正确的解决方案是virtual ~A()=default
吗?它似乎有效,但我感觉我漏掉了什么
$ clang++ a.cpp
/usr/bin/ld: /tmp/a-a25aa3.o: in function `B::~B()':
a.cpp:(.text._ZN1BD2Ev[_ZN1BD2Ev]+0x14): undefined reference to `A::~A()'
Source:
class A {
public:
virtual int test()=0;
virtual ~A()=0;
};
class B : public A {
public:
virtual int BTest()=0;
};
class C : public B {
public:
int test() override { return 1; }
int BTest() override { return 2; }
~C() override {}
};
int main() {
C c;
c.test();
}