O padrão é tornar as classes `finais 'ou dar a elas um destruidor virtual?

Classes com destruidores não virtuais são uma fonte de erros se forem usadas como classe base (se um ponteiro ou referência à classe base for usado para se referir a uma instância de uma classe filha).

Com a adição do C ++ 11 de umfinal estou pensando se faz sentido definir a seguinte regra:

Toda classe deve preencher uma dessas duas propriedades:

ser marcadofinal (se ainda não tiver a intenção de ser herdada)ter um destruidor virtual (se é (ou se destina a) ser herdado de)

Provavelmente, existem casos em que nenhuma dessas duas opções faz sentido, mas acho que elas podem ser tratadas como exceções que devem ser cuidadosamente documentadas.

questionAnswers(3)

yourAnswerToTheQuestion