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
fen alguna clase B está marcada con el especificador de virtudesfinaly en una clase D derivada de B una funciónD::fprevalece sobreB::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).