[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