[C con Clase] Otra duda

Salvador Pozo salvador en conclase.net
Jue Mar 13 16:59:11 CET 2014


El pasado 2014-03-13 11:56:19, Miguel Alejandro jimenez escribió:
 
MAj> Volviendo a esta 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>       }

Bien, ahora entiendo que lo que quieres liberar es el vector "list".

Pues tengo una buena noticia: no es necesario.

list es de tipo vector, y vector es una plantilla de clase que tiene su propio destuctor, de modo que cuando, en este caso, el objeto de la clase "Bibliotheque" sea destruido, el destructor de "list" será invocado automáticamente.

MAj> La verdad no se como liberar estos espacios de memoria , es verdad que lo
MAj> ideal seria liberarlos en la misma funcion stocker(); , pero no puedo , ya
MAj> que despues voy a utilizar el vector en otras funciones ,

Bueno, no podrías en ningún caso, ya que la idea es iniciar o añadir elementos al vector. No tendría utilidad añadirlos e inmediatamente después eliminarlos.

MAj> Entoces en la clase Bibliotheque , cree un destructor que seria algo como
MAj> esto:
MAj> Bibliotheque::~Bibliotheque(){
MAj>        for(unsigned int p=0;p<list.size();p++)
MAj>         list.push_back(delete );
MAj>                        }

Si quieres invocar el destructor para cada elemento de "list" dentro del destructor de "Bibliotheque", lo que no es necesario, es más simple que eso. No necesitas liberar cada elemento del vector, puedes eliminar el vector completo:

Bibliotheque::~Bibliotheque(){
       list.clear();
}

Sin embargo, es innecesario, ya que el vector "list" será destruido automáticamente al destruir "Bibliotheque".

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