Ver Mensaje Individual
  #4 (permalink)  
Antiguo 16/07/2016, 08:50
Avatar de xKuZz
xKuZz
 
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 2 meses
Puntos: 27
Respuesta: Duda con punteros

No vacía el espacio asignado, debes de vaciarlo explícitamente con delete, antes de volver a llamar a new. No obstante, esa metodología a mi punto de vista parece incorrecta por dos razones:
  • Es posible que el compilador optimice el uso de new después de delete y te quedes todo el rato con la misma posición de memoria
  • En caso contrario, estás malgastando tiempo en liberar y reservar memoria y la aleatoriedad de los datos en realidad son datos que fueron usados por otras aplicaciones y procesos del sistema previamente.

Sería, en mi opinión, más correcto realizar lo siguiente:
  • En el constructor por defecto asignar un valor aleatorio a la variable de instancia n. [I]Si no sabes hacerlo basta buscar en Google "numeros aleatorios c++" (o si lo prefieres y puedes la nueva forma de hacerlo de c++11)
  • En vez de realizar delete llamar al constructor por defecto de nuevo de la siguiente manera:

    Código C++:
    Ver original
    1. class X
    2. {
    3. public:
    4.     int n;
    5.   X() {
    6.     // Implementación aleatorio
    7.   }
    8. };
    9.  
    10. int main(int argc, char* args[])
    11. {
    12.     X *p;
    13.     p = new X;
    14.     // Hacer algo
    15.     *p = X(); // Ahora se asignaría un nuevo valor aleatorio a la instancia p de la clase X
    16.     delete p; // Sólo es necesario un delete al final
    17.     return 0;
    18. }