[C con Clase] Otra duda

Salvador Pozo salvador en conclase.net
Mie Mar 12 22:25:12 CET 2014


El pasado 2014-03-12 20:55:39, Miguel Alejandro jimenez escribió:
 
MAj> Pues se me ha generado otra duda pero es sobre vectores , teniendo la
MAj> siguiente definicion de una funcion :
MAj> void Bibliotheque::stocker(Oeuvre & test, int n=1 )  {
MAj>        while (n >=1){
MAj>       list.push_back(new Exemplaire(test));
MAj>       cout<<"PRUEBA"<<endl;
MAj>       n--;
MAj>       }
MAj> }
MAj> En esta funcion no se como liberar los espacios de memoria , es decir como
MAj> utilizo la palabra reservada delete , para liberar la memoria , o
MAj> sencillamente en este caso no es necesario , por que va rellenando el
MAj> vector con los parametros dados?

Hola:

Entiendo que la memoria que quieres liberar es la apuntada por test.

Yo soy partidario de que, salvo que el problema obligue a actuar de otro modo, la memoria se libere en el mismo nivel que se obtiene.

Es decir, si la memoria para test se obtiene en el nivel en que se invoca al método "stocker", se libere en ese mismo nivel. O sea, cuando se retorne de la función.

A la hora de depurar o analizar un programa, es más sencillo si las reservas y liberaciones de memoria se hacen en la misma función.

En este caso sí es necesario liberar la memoria asignada a test, ya que en el vector almacenas una copia de test, no el propio test. Bueno, al menos creo que deberías almacenar una copia. Si "new Exemplaire(test)" no crea una copia de test, podrías tener algunos problemas de incongruencia.

Por ejemplo, si haces uso de test después del retorno, o si la liberas, o si se libera automáticamente, el contenido del vector podría modificarse o corromperse sin una causa evidente.

Desconozco el mecaniemo exacto de este procedimiento, así que no estoy muy seguro de esto.

Hasta pronto.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net
Blog con Clase: http://blogconclase.wordpress.com
Con Clase: http://conclase.net


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