Чистое определение виртуального деструктора внутри класса дает ошибку компиляции

Чистый виртуальный деструктор в базовом классе должен иметь определение. В противном случае компилятор вызовет деструктор базового класса из деструктора производного класса во время компоновки и вызовет ошибку компоновки.

Я попытался определить чистый виртуальный деструктор внутри базового класса, как показано ниже:

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()
{

}

Это устраняет ошибку компиляции и ведет себя так, как я понимаю.

Но мой вопрос в том, как определение чистого виртуального деструктора вне базового класса устраняет ошибку компиляции?

13
задан nitin_cherian 19 November 2011 в 14:11
поделиться