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