C'est l'un des principes fondamentaux du C++.
Allocation dynamique
Dans votre cas, l'allocation de la mémoire et l'appel conséquent du constructeur pour Z
se produira le new
:
Z* z = new Z();
La partie opposée pour la destruction et la désallocation de la mémoire se produira sur delete
:
delete z;
Mais puisque votre code ne l'a pas, la désallocation de la mémoire n'aura jamais lieu, et vous perdrez le pointeur. z
n'ayant aucune possibilité de désallouer l'objet dans le futur. C'est une fuite de mémoire typique.
Déclaration
D'autre part, si vous déclarez un objet comme ceci :
Z z;
L'allocation de mémoire et le constructeur seront appelés immédiatement ici, au point de déclaration, et lorsque la portée de l'existence de l'objet sera terminée (c'est-à-dire à la fin de la fonction), le destructeur sera appelé automatiquement et la mémoire sera désallouée.
Allocation dynamique vs Déclaration
Je n'entrerai pas dans le débat sur ce qui est mieux et ce qui ne l'est pas, mais je vous fournirai plutôt l'extrait d'un des articles dont le lien figure ci-dessous :
Contrairement aux déclarations, qui chargent des données sur le segment de données du programme, l'allocation dynamique crée un nouvel espace utilisable sur la STACK du programme (une zone de RAM spécifiquement allouée à ce programme).
FYI : Pile = Performance pero pas toujours la meilleure solution .
Références
Pour votre plaisir : tic tac orteil .