По умолчанию делать классы либо `final`, либо предоставить им виртуальный деструктор?

Классы с не виртуальными деструкторами являются источником ошибок, если они используются в качестве базового класса (если указатель или ссылка на базовый класс используется для ссылки на экземпляр дочернего класса).

С добавлением C ++ 11final класс, мне интересно, имеет ли смысл устанавливать следующее правило:

Каждый класс должен выполнять одно из этих двух свойств:

быть отмеченнымfinal (если он (пока) не предназначен для наследования от)иметь виртуальный деструктор (если он унаследован (или предназначен)

Возможно, есть случаи, когда ни один из этих двух вариантов не имеет смысла, но я думаю, что они могут рассматриваться как исключения, которые должны быть тщательно задокументированы.

Ответы на вопрос(3)

Ваш ответ на вопрос