# Que fait "delete" en C++ ?



## sambocuccio (25 Mai 2005)

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 ??


----------



## BooBoo (25 Mai 2005)

sambocuccio a dit:
			
		

> Suite à cette question, j'ai été amené à écrire le programme suivant:
> 
> ```
> [...]
> ...



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 !


----------



## osaris (26 Mai 2005)

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


----------

