Как я знаю в cpp, когда мы удаляем объект или когда заканчивается главный, деструкторы всех объектов будут вызваны. Для тех объектов, тип которых является дочерним по классу, деструкторы класса child будут вызываться сначала, тогда будут вызваны distructors родителя класса.
Теперь я смущен. Потому что, если разрешен чистый виртуальный деструктор, как его можно вызывать, когда мы удаляем объект класса child? Разве он не вызывает деструктор родительского класса, который является чисто виртуальным?Почему можно сделать деструктор чистым виртуальным
ответ
Да, деструктор базового класса называется. Это означает, что должен иметь реализацию. Можно обеспечить реализацию для любой чистой виртуальной функции, включая деструктор. Например:
struct foo
{
virtual ~foo() = 0; // pure virtual dtor
};
foo::~foo() {} // implementation
Применение случая чистого виртуального деструктора является обеспечение класса без каких-либо других чисто виртуальные методы не могут быть созданы.
, поэтому чистый виртуальный функция может иметь свою реализацию ТОЛЬКО ЕСЛИ это деструктор? – Yves
@Thomas Нет, другие чистые виртуальные функции-члены * могут * также иметь реализации, но деструктор * должен *. Я уточню это. – juanchopanza
большое спасибо. Меня заблуждала глупая книга. – Yves
Чистая декларация виртуального деструктора в базовом классе заставляет любые производные классы внедрять деструктор, поэтому, если у вас есть указатель на базовый класс и удалить его, тогда производные классы dtor затем называются – EdChum
@TartanLlama благодарит – Yves