simple programacion orientada objetos herencia ejemplo destructores constructores clases c++ destructor

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.