代码如下:
#include <iostream>
class A {
public:
virtual ~A() = 0;
};
A::~A() {
std::cout << "A destructor!\n";
}
class B : public A {
public:
B() {
std::cout << "B constructor invoked!\n";
}
~B() {
std::cout << "B destructor invoked!\n";
}
};
int main()
{
B b;
return 0;
}
如果不实现A::~A(),则将出现链接错误,提示无法链接到A::~A(),究其原因是对象析构时,最深层派生(most derived class)的那个class(class B)其析构函数最先被调用,然后是其每个base class(class A)的析构函数被调用。所以此时A::~A()必须被实现,即使其被定义为pure virtual析构函数。