[C con Clase] Destrucción automática de objetos temporales

David fire ddfire en gmail.com
Sab Dic 6 22:07:16 CET 2008


hola
no uses new para crear el objeto, cuando usas new crea el objeto en el heap
y no lo va a destruir.
en java si destruye los objetos a los que nadie apunta pero en C++ no.
David

El 6 de diciembre de 2008 18:04, gdotta <gdotta en telefonica.net> escribió:

>  No sé cómo hacer que los objetos temporales dinámicos devueltos por
> referencia por algunos métodos se destruyan de forma automática.
> Por ejemplo, tengo una claseX con un operador suma sobrecargado que
> devuelve por referencia objetos nuevos de la claseX:
>
> class claseX{
> (... métodos diversos incluyendo destructor de memoria dinámica ...)
> (... atributos para los que se reserva memoria dinámica ...)
> claseX& operator+(const claseX& operando) const;
> };
>
> El operador sobrecargado suma lo implemento como sigue:
>
> claseX& operator+(const claseX& operando) const{
> claseX* temporal = new claseX(0);     //Aqui es donde creo el nuevo objeto
> (...operaciones para crear la suma y guardarla en temporal...)
> return *temporal;     //Aqui devuelvo el nuevo objeto
>
> En una función del programa uso objetos de esta clase:
>
> void funcion(){
> claseX a(1);
> claseX b(2);
> claseX c(1);
> (a + b + c).visualiza(); //Método de ejemplo
> }
>
> Compruebo que los objetos temporales creados en el operador sobrecargado
> suma (objeto b+c y objeto a+(b+c)) no pasan por el destructor y, por tanto,
> no liberan memoria.
>
> Por un lado, como las clases creadas tratan de imágenes de gran tamaño
> interesa minimizar el trasiego de datos y, por otro, me gusta la sintaxis
> clara y sencilla que se obtiene con operadores sobrecargados que devuelven
> referencias a los objetos.
>
> He pensado que la clase lleve una lista estática de los objetos temporales
> que se crean para luego saber que hay que destruirlos, pero, como el
> programa corre durante tiempos muy largos creando objetos temporales que
> deberían destruirse al poco, no puedo esperar al final de la ejecución ya
> que antes de eso se habrá llenado toda la memoria.
>
> Agradecería cualquier sugerencia.
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>



-- 
(\__/)
(='.'=)This is Bunny. Copy and paste bunny into your
(")_(")signature to help him gain world domination.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20081206/f4396e65/attachment.html>


Más información sobre la lista de distribución Cconclase