Чистый виртуальный деструктор
в базовом классе должен иметь определение. В противном случае компилятор вызовет деструктор базового класса из деструктора производного класса во время компоновки и вызовет ошибку компоновки.
Я попытался определить чистый виртуальный деструктор внутри базового класса, как показано ниже:
class base
{
public:
base()
{
cout << "constructor in base class\n";
}
virtual ~base()=0
{}
};
Это дало ошибку компиляции:
ошибка: чистый спецификатор в определении функции
Затем я попытался определить функцию вне базовый класс, как показано ниже:
class base
{
public:
base()
{
cout << "constructor in base class\n";
}
virtual ~base()=0;
};
base::~base()
{
}
Это устраняет ошибку компиляции и ведет себя так, как я понимаю.
Но мой вопрос в том, как определение чистого виртуального деструктора вне базового класса устраняет ошибку компиляции?