По умолчанию делать классы либо `final`, либо предоставить им виртуальный деструктор?
Классы с не виртуальными деструкторами являются источником ошибок, если они используются в качестве базового класса (если указатель или ссылка на базовый класс используется для ссылки на экземпляр дочернего класса).
С добавлением C ++ 11final
класс, мне интересно, имеет ли смысл устанавливать следующее правило:
Каждый класс должен выполнять одно из этих двух свойств:
быть отмеченнымfinal
(если он (пока) не предназначен для наследования от)иметь виртуальный деструктор (если он унаследован (или предназначен)Возможно, есть случаи, когда ни один из этих двух вариантов не имеет смысла, но я думаю, что они могут рассматриваться как исключения, которые должны быть тщательно задокументированы.