Que fait "delete" en C++ ?

sambocuccio

Membre confirmé
18 Mars 2004
26
0
86
Bastia
Suite à cette question, j'ai été amené à écrire le programme suivant:

#include <Carbon/Carbon.h>

class point
{
int x, y;

public:
point (int abs, int ord)
{
x = abs, y = ord;
}
~point()
{
}
void affiche();
};

#include "test.h"
#include <iostream>
using namespace std;

void point:: affiche()
{
cout << "x = " << x << " y = " << y << "\n";
}

#include <iostream>

#include "test.h"

int main (int argc, char * const argv[])
{
point * a;
a = new point (4, 5);
a->affiche();
delete a;
a->affiche();
return 0;
}

Je pensais que l'instruction "delete a;" effaçait définitivement l'objet a. Or, il n'en est rien puisque le deuxième appel à "a->affiche()" donne le même résultat.
Quelque chose m'échappe certainement; mai QUOI ?? :confused: :confused:
 
sambocuccio a dit:
Suite à cette question, j'ai été amené à écrire le programme suivant:
Bloc de code:
[...]
int main (int argc, char * const argv[]) 
{
	point * a;
	a = new point (4, 5);
	a->affiche();
	delete a;
	a->affiche();
    return 0;
}
Je pensais que l'instruction "delete a;" effaçait définitivement l'objet a. Or, il n'en est rien puisque le deuxième appel à "a->affiche()" donne le même résultat.
Quelque chose m'échappe certainement; mai QUOI ?? :confused: :confused:

pour moi, l'operateur delete ne modifie pas la valeur de a. Il desalloue juste la mémoire. Donc au second appel, comme tu n'as fait aucune autre allocation dans le tas, a contient encore les données de l'objet.
je dis ca, sans faire de test... j'ai peut être tord !
 
Effectivement, quand tu fais le delete tu détruit le pointeur sur la case en mémoire. La valeur reste en mémoire tant qu'elle n'est pas réécrite par une autre écriture en mémoire...

Par contre on peut imaginer que dans le destructeur de ta classe tu mettes les valeurs de tes données membres à NULL. A ce moment la tu ne dois plus pouvoir afficher tes valeurs ;)