Este es uno de los fundamentos en C++.
asignación dinámica
En su caso, la asignación de memoria y la consiguiente llamada de constructor para Z
que ocurrirá el new
:
Z* z = new Z();
la parte opuesta de la destrucción y la cancelación de asignación de memoria que ocurrirá el delete
:
delete z;
Pero dado que su código no lo tiene, la desasignación de memoria nunca ocurrirá, y además perderá el puntero z
sin posibilidades de desasignar el objeto en el futuro. Esto es una pérdida de memoria típica.
Declaración
Por otro lado, si se declara objeto como éste:
Z z;
asignación de memoria y constructor serán llamados inmediatamente a la derecha aquí en el punto de declaración, y cuando el objeto de el alcance de la existencia ha finalizado (es decir, al final de la función) se llamará automáticamente al destructor y se desasignará la memoria.
dinámico de asignación vs Declaración
yo no voy a entrar en debates sobre lo que es mejor y lo que no lo es, sino que proporcionará el extracto de uno de los artículos que se vincula a continuación:
A diferencia de las declaraciones, que cargan datos en el segmento de datos de programas, la asignación dinámica crea un nuevo espacio utilizable en los programas STACK (un área de RAM específicamente asignada a ese programa).
FYI: Stack = Performance, pero not always the best solution.
Referencias
Para su placer: tictactoe.
En el bloque de código en el que he declarado * z, he terminado con él, así que podría llamar "eliminar z" justo antes de devolver la instrucción del proceso. –
@Apoorva: si nunca necesita '* z' fuera del bloque, no debe usar la asignación dinámica. Como escribió James Kanze, simplemente use 'Z z;' y el objeto se destruirá cuando 'proc()' regrese. – MSalters