programacion - herencia simple c++
¿Un destructor es considerado una función constante? (2)
Considera esto
class Foo
{
public:
Foo(){}
~Foo(){}
void NonConstBar() {}
void ConstBar() const {}
};
int main()
{
const Foo* pFoo = new Foo();
pFoo->ConstBar(); //No error
pFoo->NonConstBar(); //Compile error about non const function being invoked
delete pFoo; //No error
return 0;
}
En la función principal estoy llamando a las funciones const y non const de Foo
Intentar llamar a cualquier función que no sea constante produce un error en Visual Studio como tal
error C2662: ''Foo::NonConstBar'' : cannot convert ''this'' pointer from ''const Foo'' to ''Foo &''
Pero delete pFoo
no emite ningún error de este tipo. La declaración de eliminación está obligada a llamar al destructor de la clase Foo que no tiene un modificador de const. Al destructor también se le permite llamar a otras funciones miembro no const. Entonces, ¿es una función constante o no? ¿O es eliminar en un puntero constante una excepción especial?
La vida útil de un objeto finaliza (para el propietario / ámbito de aplicación) tan pronto como se invoca el destructor, no cuando el destructor regresa.
Por lo tanto no veo ningún problema eliminando constantes. Ya se ha ido para ti cuando llamas a eliminar.
De lo contrario, eliminar objetos constantes requeriría un const_cast.
Puede eliminar objetos a través de punteros constantes. En C ++ 11, también puede borrar elementos de contenedor a través de constitadores. Entonces sí, en cierto sentido, el destructor es siempre "constante".
Una vez que se invoca el destructor, el objeto ha dejado de existir. Supongo que la cuestión de si un objeto no existente es mutable o no es discutible.