Должен ли деструктор абстрактного класса быть чистым виртуальным?
Я считаю, что виртуального в целом достаточно.
Есть ли еще одна причина сделать его чистым виртуальным, чем заставить производные классы реализовать свой собственный деструктор? Я имею в виду, что если вы выделяете что-то в конструкторе своего класса, вы должны использовать собственный деструктор - если ваш класс получен или нет.
Не считается ответом, как я уже знаю. Если вы хотите, чтобы ваш класс был абстрактным и не имел чистых виртуальных функций, оставьте его деструктору.
Используется еще несколько?
Ответы
Ответ 1
Если вы хотите, чтобы ваш класс был абстрактным и он не имеет чистых виртуальных функций - оставьте это деструктору.
Собственно, я не думаю, что там больше. Весь чистый виртуальный деструктор делает, делает весь класс абстрактным. Вы должны обеспечить реализацию для чистого виртуального деструктора, а также для нечистого виртуального деструктора, деструкторы производных классов виртуальны только с виртуальным деструктором и т.д.
В принципе, если класс уже имеет некоторые чистые виртуальные функции, его поведение будет эквивалентно виртуальному и чисто виртуальному деструктору.
Ответ 2
Нет. Если базовый класс выделяет что-либо, то он должен освободить его.
Кроме того, если производный класс ничего не делает, нет смысла заставлять их писать фиктивный dtor.
Ответ 3
В идеале язык должен иметь способ гарантировать (неявно или нет), что деструктор является виртуальным в абстрактных классах, не определяя его или не делая его чистым. Но это не так.
Таким образом, выбор: либо сделать его чистым, и нести бремя определения его в каждом производном классе, либо сделать это не так, и нести бремя определения его в абстрактном классе. Позже это меньше работы, а также более короткий код, поэтому я бы пошел на это.
Ответ 4
Если ваш абстрактный класс является чистым интерфейсом, без каких-либо членов данных, чем вы могли бы получить от dtor pure virtual. Я предпочитаю это сам, так как я видел, как многие программисты с горячими кадрами забывают создать виртуальный деструктор вообще: даже когда они пишут производные классы, содержащие виртуальные методы.
Поэтому я бы сделал это исключительно для минимизации головной боли обслуживания в будущем.