Создание абстрактного класса состоит в том, чтобы сделать одну из своих функций-членов чистой виртуальной функцией.Почему мы не обязаны реализовывать чистый виртуальный деструктор?
Создание класса абстрактных обязывает детей класса реализовать базовую чистую виртуальную функцию.
Мы можем даже сделать деструктор базового класса чистым, и этого достаточно, чтобы быть абстрактным классом.
вопрос:
почему мы не обязаны реализовать деструктор чисто виртуальную базу в нашем производном классе?
Это означает, что если C++ добавляет к нам четыре функции-члена по умолчанию: конструктор, конструктор копирования, назначение и деструктор, нам не нужно реализовывать его в нашем производном классе?
например:
#include <iostream>
using namespace std;
class Base
{
public:
Base(){cout << "Base Ctor" << endl;}
virtual ~Base() = 0 {cout << "Virtual base dtor" << endl; }
};
class Derived : public Base
{
public:
Derived(){cout << "Derived Ctor" << endl;}
// virtual ~Derived() {cout << "Virtual Derived dtor" << endl; }
};
int main()
{
Base* theBase = new Derived;
delete theBase;
cout << endl;
cout << endl << endl;
return 0;
}
- Я знаю, что я должен добавить дочерний деструктор, чтобы освободить память, если она распределяется динамически.