Это неправильно писать:
class A {
public:
virtual ~A() = 0;
};
для абстрактного базового класса?
По крайней мере, это компилируется в MSVC ... Будет ли сбой во время выполнения?
c++
polymorphism
destructor
pure-virtual
Иван Кречетов
источник
источник
Ответы:
Да. Вам также нужно реализовать деструктор:
должно хватить.
И так как это получило отрицательное голосование, я должен уточнить: если вы извлекаете что-то из A и затем пытаетесь удалить или уничтожить это, в
A
конечном итоге будет вызван деструктор. Поскольку он чистый и не имеет реализации, возникнет неопределенное поведение. На одной популярной платформе это вызовет обработчик purecall и аварийное завершение работы.Изменить: исправление декларации, чтобы быть более совместимым, скомпилировано с http://www.comeaucomputing.com/tryitout/
источник
Приватные деструкторы: они выдадут вам ошибку при создании объекта производного класса - не иначе. Диагностика может появиться, хотя.
Класс с чистым виртуальным деструктором является абстрактным классом. Обратите внимание:
Взятые прямо с черновика:
источник