Título: Problema al crear arreglos de objetos en C++ Publicado por: DarkSorcerer en 15 Septiembre 2013, 12:45 pm Primero que nada, soy novato en C++, espero poder surgir con la ayuda :D
Bueno, resulta que estoy practicando lo que he aprendido en C++, aun tengo que dominar los punteros y la asignacion dinamica. Tambien en la creacion de arreglos, donde les explicare mi problema. Cree una clase llamada "Persona", que tiene como atributos su nombre, su rut (en mi pais se refiere al numero de identificacion) y la edad. Yo quiero crear un arreglo de personas, desde el main creo 3 personas y ademas, llamo a un metodo para que imprima los datos de cada persona, me funciona, pero no exactamente como queria, en el destructor yo implemente de tal manera que imprimiera un mensaje que confirmara que se esta borrando cada vez que se usa delete, es aqui donde sale mi problema, una vez que llene mi arreglo con personas, mando el arreglo a la funcion "desplegarDatos" para que imprimiera los datos de cada persona, pero me sale lo que escribi en el destructor justo al llamar a imprimir el arreglo, y ya cuando termino de imprimir, vuelve a imprimir el mensaje del destructor ¿ por que se imprimio al principio "borrando datos..." si no llame a delete, si el delete lo llamo cuando terminara de imprimir ? Esto es lo que me sale en la ventana de comandos Código: Creando un arreglo de 3 personas Ahora lees dejo mi codigo Código
Código
Código
Título: Re: Problema al crear arreglos de objetos en C++ Publicado por: amchacon en 15 Septiembre 2013, 15:18 pm Código
Estás usando lo que se conoce como "move constructor". Es decir, cambias la referencia del objeto a otro nuevo (borrando el anterior). Es un sistema factible, y quizás sea lo más comodo en este caso. Título: Re: Problema al crear arreglos de objetos en C++ Publicado por: dato000 en 15 Septiembre 2013, 19:05 pm Espera, dejame entenderlo (y explicarlo un poco para ver si lo entendi bien) en español XD siguiendo el detalle especificado por amchacon
Lo que haces es este proceso, creo: 1) Creas un constructor con los datos "nombre persona", "string rut", "int edad" 2) Estas reservando una espacio de memoria (No se si estas reservando memoria dinamica, ya que estas usando el destructor virtual) 3) Creas un arreglo de personas apuntando a un espacio de memoria (al ser objetos, nuevamente no estoy seguro si reservas memoria dinamica) 4) Asignas ese constructor a una posición del arreglo del mismo tipo persona con los datos de cada persona 5) Cuando se asigna la posición y los datos en la misma, invocas al destructor, para eliminar los datos del constructor, se realiza de forma automatica para despejar memoria 6) Cuando invocas el constructor se envia el mensaje "borrando datos" 7) Realizas la asignación nuevamente... 8) LLamas a la función "desplegarDatos" que pues, toma el arreglo y usas un ciclo repetitivo para mandar el mensaje con la info de cada persona en tu arreglo 9) usas el delete para borrar cada objeto persona que se guarda en cada posición. 10) return 0 ---> salida del programa Pues creo que la cosa es así, no se si te ayude un poco a entender el funcionamiento de tu programa, así es como veo esa prueba de escritorio :silbar: :silbar: Lo que no se es como hacer que te mande esos primeros mensajes, tal vez necesites asignar un destructor con un dato (se puede hacer eso?? nunca lo he intentado, de hecho, nunca uso destructores XD) y en el caso que uses el delete pues use ese destructor configurado con el dato, tal vez un booleano o un entero para diferenciarlo del destructor por defecto, que es el que se llama al principio cuando asignas los datos en la posición del arreglo. slds |