У pure virtual destructor
в базовом классе должно быть определение. В противном случае компилятор сгенерирует вызов деструктора базового класса из деструктора производного класса во время компоновки и вызовет ошибку ссылки.
Я попытался определить чистый виртуальный деструктор внутри базового класса, как показано ниже:
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()
{
}
Это устраняет ошибку компиляции и ведет себя как я понимаю.
Но мой вопрос заключается в том, как определение чистого виртуального деструктора вне базового класса устраняет ошибку компиляции?