Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1260 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Une petite question sur delete...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Une petite question sur delete...

n°408447
haazheel
Posté le 26-05-2003 à 21:30:35  profilanswer
 

Salut,
 
alors voilà mon problème:
 
à un moment dans l'exécution de mon programme je fais un new MaClasse.
 
Quand je fais delete MaClasse, elle est effectivement bien supprimée, mais si je fais:
 

Code :
  1. if (MaClasse)
  2.   ShowMessage("ok" );


 
Il m'affiche quand même "ok", alors qu'elle est supprimée...
 
C'est normal?


---------------
Another .Net Blog
mood
Publicité
Posté le 26-05-2003 à 21:30:35  profilanswer
 

n°408452
gatorette
Posté le 26-05-2003 à 21:32:11  profilanswer
 

Oui, le delete ne met pas à 0 ton pointeur (je suppose que MaClasse est un pointeur sinon ça n'a pas de sens). Cependant, il ne faut pas essayer d'accéder à des membres.


---------------
each day I don't die is cheating
n°408454
kadreg
profil: Utilisateur
Posté le 26-05-2003 à 21:32:27  profilanswer
 

haazheel a écrit :

C'est normal?


 
oui


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°408474
haazheel
Posté le 26-05-2003 à 21:41:20  profilanswer
 

gatorette a écrit :

Oui, le delete ne met pas à 0 ton pointeur (je suppose que MaClasse est un pointeur sinon ça n'a pas de sens). Cependant, il ne faut pas essayer d'accéder à des membres.


 
Accéder à des membres? Qu'est-ce que tu veux dire par là?
 
Et donc pour vraiment initialiser, il faut que je mette mon pointeur à NULL?


---------------
Another .Net Blog
n°408503
haazheel
Posté le 26-05-2003 à 21:58:35  profilanswer
 

juste un petit test:
 

Code :
  1. delete MaClasse;
  2. MaClasse = NULL;


 
A l'air de fonctionner


---------------
Another .Net Blog
n°408512
gatorette
Posté le 26-05-2003 à 22:07:05  profilanswer
 

haazheel a écrit :


Accéder à des membres? Qu'est-ce que tu veux dire par là?


 
Je veux dire que si tu fais :

Code :
  1. delete monPointeur;
  2. monPointeur->maFonction();
  3. monPointeur->maVariable;


tu risques d'avoir des problèmes.
 

haazheel a écrit :


Et donc pour vraiment initialiser, il faut que je mette mon pointeur à NULL?


Tu n'initalises rien en mettant ton pointeur à NULL. NULL est juste une valeur repère. Je crois que quand un pointeur est NULL, tu peut être sûr qu'il ne pointes pas vers un objet. C'est une pratique courante de mettre un pointeur à NULL avant de créer l'objet associé et de le remettre à NULL (comme tu l'a écrit) après l'avoir effacé.


---------------
each day I don't die is cheating
n°408553
haazheel
Posté le 26-05-2003 à 22:29:34  profilanswer
 

gatorette a écrit :


 
Je veux dire que si tu fais :

Code :
  1. delete monPointeur;
  2. monPointeur->maFonction();
  3. monPointeur->maVariable;


tu risques d'avoir des problèmes.


 
Effectivement, je suis bien conscient que si je fais un delete de ma classe, c'est pas pour tenter de l'utiliser après :)  
 

gatorette a écrit :


Tu n'initalises rien en mettant ton pointeur à NULL. NULL est juste une valeur repère. Je crois que quand un pointeur est NULL, tu peut être sûr qu'il ne pointes pas vers un objet. C'est une pratique courante de mettre un pointeur à NULL avant de créer l'objet associé et de le remettre à NULL (comme tu l'a écrit) après l'avoir effacé.


Donc j'ai bien fait...
 
Et en plus ça fonctionne... :sol:


---------------
Another .Net Blog
n°408707
Taz
bisounours-codeur
Posté le 27-05-2003 à 01:44:39  profilanswer
 

NULL qui est canoniquement égal à 0 selon la norme ISO

n°408758
lecoyote
Posté le 27-05-2003 à 08:41:48  profilanswer
 

++Taz a ?it :

NULL qui est canoniquement ?l ? selon la norme ISO


 
arf... là n'été pas la question...

n°825734
xyz75
Posté le 18-08-2004 à 11:52:30  profilanswer
 

Dans le cas où on fait un "delete MaClasse", sans "MaClasse = NULL" ensuite, y a-t-il un risque de fuite de mémoire ?
Et est-ce que faire "MaClasse = NULL" suffit pour eviter un risque de fuite ?
 
A vrai dire, j'ai un cas où je fais un "delete" mais sur le debuggeur, j'ai l'impression que ce "delete" ne fait rien !! Tous les membres de l'instance de cette classe ne sont pas "effacés".
Si je fais : "MaClasse = 0" ensuite, ca semble bon.

mood
Publicité
Posté le 18-08-2004 à 11:52:30  profilanswer
 

n°825792
jesus_chri​st
votre nouveau dieu
Posté le 18-08-2004 à 13:16:23  profilanswer
 

xyz75 a écrit :

Dans le cas où on fait un "delete MaClasse", sans "MaClasse = NULL" ensuite, y a-t-il un risque de fuite de mémoire ?
Et est-ce que faire "MaClasse = NULL" suffit pour eviter un risque de fuite ?


 
pas une fuite, mais un pointeur fou.
delete n'efface rien, ça indique juste au gestionnaire de mémoire que la place occupée est maintenant libre. Le contenu ne change pas.
C'est comme quand tu efface un fichier, il n'est plus indexé mais son contenu est tjrs présent physiquement sur le disque jusqu'à écrasement

n°826410
el muchach​o
Comfortably Numb
Posté le 19-08-2004 à 01:10:58  profilanswer
 

Et la question à 100 boules pour Taz : pourquoi est-ce que le comité C++ n'a pas choisi de forcer un pointeur à 0 quand on le delete ?


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°826412
Taz
bisounours-codeur
Posté le 19-08-2004 à 01:23:28  profilanswer
 

parce que tu fais comment quand l'argument de delete n'est une  l-value ?

n°827163
cris56
Posté le 19-08-2004 à 20:38:20  profilanswer
 

tu aurais un exemple stp ? (ou justement ce n'est pas une l-value)

n°827177
Kristoph
Posté le 19-08-2004 à 21:09:57  profilanswer
 

cris56 a écrit :

tu aurais un exemple stp ? (ou justement ce n'est pas une l-value)


 

Code :
  1. const MaClass * const pointer_pas_affectable;


 
PS : je sais qu'il y a un const en trop ;)

n°827180
cris56
Posté le 19-08-2004 à 21:16:05  profilanswer
 

a ouai ok, merci

n°827308
el muchach​o
Comfortably Numb
Posté le 19-08-2004 à 22:46:26  profilanswer
 

Je n'ai pas compris cet exemple. Dans quel cas apparait-il en pratique ?


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°827327
kadreg
profil: Utilisateur
Posté le 19-08-2004 à 23:02:58  profilanswer
 

el muchacho a écrit :

Je n'ai pas compris cet exemple. Dans quel cas apparait-il en pratique ?


 
chez ilog [:spamafote]


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°828002
el muchach​o
Comfortably Numb
Posté le 20-08-2004 à 18:45:43  profilanswer
 

Ce sont des classes statiques, non ?


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°828029
Taz
bisounours-codeur
Posté le 20-08-2004 à 19:48:54  profilanswer
 

el muchacho a écrit :

Je n'ai pas compris cet exemple. Dans quel cas apparait-il en pratique ?

je pensais plus simplement à un retour de fonction
 
delete get_pointer();


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Une petite question sur delete...

 

Sujets relatifs
php et xhtml : question bête ...Question de timing
[ PHP ] une petite question...Question sur le code binaire
[DEBUTANT] Question bete \n et <br>[HTML] Mise en forme : question idiote
XHTML 1.1 : bête question[ Appache ] Question sur le acces.log
question sur une horloge en C 
Plus de sujets relatifs à : Une petite question sur delete...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR