1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Toto * t = new Toto; // un pointeur brut initialisé pour pointer
// sur une donnée que l'on vient de construire sur le tas.
Toto & tr = *t; // tr n'est un autre nom donné à la donnée pointée par t
// les appels se font par:
t->f();
tr.f();
Toto * t2 = new Toto;
tr = *t2; // n'est toujours pas possible
t2 = t; // c'est possible, mais on a perdu de la mémoire.
delete tr; // ne compile pas. delete attend un pointeur.
delete t; // OK, libère la mémoire et détruit la donnée pointée par t;
delete t2; // va planter vu que t2 pointe vers la donnée initialement
// pointée par t, donnée que l'on vient de libérer et détruire.
t->f(); // va planter: t n'existe plus
tr.f(); // même chose |
Partager