Une petite question sur delete... - C++ - Programmation
Marsh Posté le 26-05-2003 à 21:32:11
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.
Marsh Posté le 26-05-2003 à 21:32:27
haazheel a écrit : C'est normal? |
oui
Marsh Posté le 26-05-2003 à 21:41:20
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?
Marsh Posté le 26-05-2003 à 21:58:35
juste un petit test:
Code :
|
A l'air de fonctionner
Marsh Posté le 26-05-2003 à 22:07:05
haazheel a écrit : |
Je veux dire que si tu fais :
Code :
|
tu risques d'avoir des problèmes.
haazheel 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é.
Marsh Posté le 26-05-2003 à 22:29:34
gatorette a écrit :
|
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 : |
Donc j'ai bien fait...
Et en plus ça fonctionne...
Marsh Posté le 27-05-2003 à 08:41:48
ReplyMarsh Posté le 18-08-2004 à 11:52:30
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.
Marsh Posté le 18-08-2004 à 13:16:23
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 ? |
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
Marsh Posté le 19-08-2004 à 01:10:58
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 ?
Marsh Posté le 19-08-2004 à 01:23:28
parce que tu fais comment quand l'argument de delete n'est une l-value ?
Marsh Posté le 19-08-2004 à 20:38:20
tu aurais un exemple stp ? (ou justement ce n'est pas une l-value)
Marsh Posté le 19-08-2004 à 21:09:57
cris56 a écrit : tu aurais un exemple stp ? (ou justement ce n'est pas une l-value) |
Code :
|
PS : je sais qu'il y a un const en trop
Marsh Posté le 19-08-2004 à 22:46:26
Je n'ai pas compris cet exemple. Dans quel cas apparait-il en pratique ?
Marsh Posté le 19-08-2004 à 23:02:58
el muchacho a écrit : Je n'ai pas compris cet exemple. Dans quel cas apparait-il en pratique ? |
chez ilog
Marsh Posté le 20-08-2004 à 18:45:43
Ce sont des classes statiques, non ?
Marsh Posté le 20-08-2004 à 19:48:54
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();
Marsh Posté le 26-05-2003 à 21:30:35
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:
Il m'affiche quand même "ok", alors qu'elle est supprimée...
C'est normal?
---------------
Another .Net Blog