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

gdotta gdotta en telefonica.net
Sab Dic 6 22:06:34 CET 2008


Hola: vuelvo a enviar el mensaje quitando acentos ya que 
sino se entiende muy mal.

El problema es que no consigo que los objetos temporales 
dinamicos devueltos por referencia por algunos metodos se 
destruyan de forma automatica. 
Por ejemplo, tengo una claseX con un operador suma sobrecargado 
que devuelve por referencia objetos nuevos de la propia claseX:

class claseX{
    (...varios metodos y atributos...)
    claseX& operator+(const claseX& operando) const; 
};

El operador sobrecargado suma lo implemento como sigue:

claseX& operator+(const claseX& operando) const{
    claseX* temp = new claseX(0); //Aqui creo nuevo objeto
    (...operac. para crear la suma y guardarla en temp...)
    return *temporal;     //Aqui devuelvo el nuevo objeto
}

En una funcion del programa uso objetos de esta clase:

void funcion(){
    claseX a(1);
    claseX b(2);
    claseX c(1);
    (a + b + c).visualiza(); 
}

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 imagenes 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 podria tener una lista estatica de 
los objetos temporales que se crean para luego destruirlos, 
pero, como el programa corre durante tiempos muy largos 
creando objetos temporales que deberian destruirse al poco, 
no puedo esperar al final de la ejecucion ya que antes de 
eso se habra llenado toda la memoria. 

Agradeceria cualquier sugerencia.






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