method español destructors c++ c++11 inheritance destructor

c++ - español - ¿Puede un destructor ser final?



override c++ español (1)

¿Puede un destructor de C ++ ser declarado como final ?

Sí.

Y si es así, ¿eso impide la declaración de una clase derivada?

Sí, porque la clase derivada tendría que declarar un destructor (explícitamente por usted o implícitamente por el compilador), y ese destructor anularía una función declarada final , que está mal formada.

La regla es [class.virtual]/4 :

Si una función virtual f en alguna clase B está marcada con el especificador de virtudes final y en una clase D derivada de B una función D​::​f prevalece sobre B​::​f , el programa está mal formado.

Es la derivación en sí la que está mal formada, no tiene que ser utilizada.

¿Declarar que un destructor es un modismo funcional para indicar que una clase no está destinada a usarse como una clase base?

Efectivamente, pero solo debes marcar la final la clase. Es bastante más explícito.

¿El estándar C ++ permite que un destructor sea declarado como final ? Me gusta esto:

class Derived: public Base { ... virtual ~Derived() final; }

Y si es así, ¿eso previene la declaración de una clase derivada?

class FurtherDerived: public Derived {// allowed? }

Si está permitido, ¿es probable que un compilador emita una advertencia? ¿Declarar que un destructor es un modismo funcional para indicar que una clase no está destinada a usarse como una clase base?

(No tiene sentido hacer esto en una clase base definitiva , solo una clase derivada).