Ответ 1
Может ли деструктор С++ быть объявлен как
final
?
Да.
И если да, то это предотвращает объявление производного класса:
Да, потому что производный класс должен был бы объявить деструктор (явно или неявно компилятором), и этот деструктор будет переопределять функцию, объявленную final
, которая плохо сформирована.
Правило [class.virtual]/4:
Если виртуальная функция
f
в некотором классе B помечена спецификатором virtfinal
, а в классе D, полученном из B, функцияD::f
переопределяетB::f
, программа плохо сформирована.
Это сам вывод, который плохо сформирован, его не нужно использовать.
Объявляет ли деструктор окончательной работоспособной идиомой для указания того, что класс не предназначен для использования в качестве базового класса?
Эффективно, но вы должны просто пометить класс final
. Это довольно понятно.