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.