Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Duda al crear un desctructor en c++

Estas en el tema de Duda al crear un desctructor en c++ en el foro de C/C++ en Foros del Web. Buenas. Tengo la siguiente estructura: Código: struct Usuario { string nombre; int numeroID; list<miTipo *> listaMensajes; }; class AlmacenaUsuarios { private: list<Usuario> * arrayNombres[1000]; list<Usuario>::iterator ...
  #1 (permalink)  
Antiguo 13/12/2011, 06:40
 
Fecha de Ingreso: abril-2004
Mensajes: 107
Antigüedad: 20 años
Puntos: 0
Duda al crear un desctructor en c++

Buenas.

Tengo la siguiente estructura:

Código:
struct Usuario {

	string nombre;
	int numeroID;
	list<miTipo *> listaMensajes;

};

class AlmacenaUsuarios {

      private:
		list<Usuario> * arrayNombres[1000];
		list<Usuario>::iterator it;
		
	
		
	
      public:
		 AlmacenaUsuarios();
		~ AlmacenaUsuarios() {

			for (int i = 0; i<1000; i++){
				arrayNombres[i]->clear();
			}

		 }

El constructor es este:

Código:
AlmacenaUsuarios::AlmacenaUsuarios(){

	for (int i = 0; i<1000; i++){
		arrayNombres[i] = new list<Usuario>;	
	}

	list<Usuario>::iterator it;	//Iterador de la lista general de cada posición
	

}

¿Ese destructor borraria cada posición del arrayNombres?


Por si hace falta, en la clase "miTipo" no he puesto ningún destructor, pero no sé si hace falta especificar alguno. La clase "miTipo" se crea así:

Código:
miTipo::miTipo(){
	
	this->tipoMensaje = "NULL";
	this->nombre = "NULL";
	this->texto = "NULL";
	this->fechaHora = new FechaHora();	
}

FechaHora, a su vez, se crea así:

Código:
FechaHora::FechaHora(){

	this->fecha = "NULL";
	this->hora = "NULL";
}

Última edición por varuk; 13/12/2011 a las 08:01
  #2 (permalink)  
Antiguo 13/12/2011, 09:51
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Duda al crear un desctructor en c++

Si usas new para crear, tienes que usar delete para destruir, es decir:


Código C++:
Ver original
  1. class AlmacenaUsuarios {
  2.  
  3.       private:
  4.         list<Usuario> * arrayNombres[1000];
  5.         list<Usuario>::iterator it;
  6.        
  7.    
  8.        
  9.    
  10.       public:
  11.          AlmacenaUsuarios();
  12.         ~ AlmacenaUsuarios() {
  13.  
  14.             for (int i = 0; i<1000; i++){
  15.                 delete arrayNombres[i];
  16.             }
  17.  
  18.          }
  #3 (permalink)  
Antiguo 13/12/2011, 10:27
 
Fecha de Ingreso: abril-2004
Mensajes: 107
Antigüedad: 20 años
Puntos: 0
Respuesta: Duda al crear un desctructor en c++

Ya lo solucioné.

Es que antes tenía puesto eso que tu dices y no me iba bien pero lo puse así:

Código:
for (int i = 0; i<1000; i++){
				arrayNombres[i]->clear();
			}
Ya que arrayNombres son punteros a listas.
  #4 (permalink)  
Antiguo 13/12/2011, 10:31
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Duda al crear un desctructor en c++

Pero es que tal y como lo haces estás dejando unas lagunas de memoria, aunque no las veas.

Ten en cuenta que cada vez que haces un new, tienes que hacer un delete para liberar la memoria.

EDITO:

Tienes que hacer ambas cosas:


Código C++:
Ver original
  1. for (int i = 0; i<1000; i++){
  2.                 arrayNombres[i]->clear();
  3. delete arrayNombres[i];
  4.             }

Última edición por alexg88; 13/12/2011 a las 10:37

Etiquetas: clase, string, struct
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:16.