Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fabien LE LEZ
On Mon, 29 Dec 2003 01:52:20 +0100, Michel wrote:
J'aimerais savoir si j'ai libéré toute la mémoire en faisant comme suit:
Oui. A un new doit correspondre un delete et un seul ; et il en va de même avec new[] et delete[]. Je ne connais pas d'exception à cette règle, mais le delete est parfois (voire souvent) caché par des systèmes qui permettent de te faciliter la vie (pointeurs intelligents, objets auto-destructeurs, etc.)
NB : bien évidemment, le delete sur un pointeur peut être effectué à deux endroits différents du code, l'important étant qu'un seul soit effectué :
int* p= new int (5); if (...) { ... delete p; ... } else { delete p; }
-- ;-)
On Mon, 29 Dec 2003 01:52:20 +0100, Michel <michel@michel.com> wrote:
J'aimerais savoir si j'ai libéré toute la mémoire en faisant comme suit:
Oui. A un new doit correspondre un delete et un seul ; et il en va de
même avec new[] et delete[].
Je ne connais pas d'exception à cette règle, mais le delete est
parfois (voire souvent) caché par des systèmes qui permettent de te
faciliter la vie (pointeurs intelligents, objets auto-destructeurs,
etc.)
NB : bien évidemment, le delete sur un pointeur peut être effectué à
deux endroits différents du code, l'important étant qu'un seul soit
effectué :
int* p= new int (5);
if (...)
{
...
delete p;
...
}
else
{
delete p;
}
J'aimerais savoir si j'ai libéré toute la mémoire en faisant comme suit:
Oui. A un new doit correspondre un delete et un seul ; et il en va de même avec new[] et delete[]. Je ne connais pas d'exception à cette règle, mais le delete est parfois (voire souvent) caché par des systèmes qui permettent de te faciliter la vie (pointeurs intelligents, objets auto-destructeurs, etc.)
NB : bien évidemment, le delete sur un pointeur peut être effectué à deux endroits différents du code, l'important étant qu'un seul soit effectué :
int* p= new int (5); if (...) { ... delete p; ... } else { delete p; }
-- ;-)
drkm
Fabien LE LEZ writes:
On Mon, 29 Dec 2003 01:52:20 +0100, Michel wrote:
J'aimerais savoir si j'ai libéré toute la mémoire en faisant comme suit:
Oui. A un new doit correspondre un delete et un seul ; et il en va de même avec new[] et delete[].
Je pense que la question, plus précisément, portait sur le fait qu'il fallait faire un delete sur une seule des variables contenant l'adresse de l'objet à détruire. Je vais donc expliciter un peu, désolé si j'ai mal compris la question.
Un pointeur stocke l'adresse d'un objet. L'opérateur delete se sert de cette adresse pour détruire l'objet. Un objet ne doit être détruit qu'une fois. Donc si deux pointeurs ont la même valeur, il ne faut utiliser delete que sur l'un deux. Après quoi les deux pointeurs /pointent/ vers un objet déjà détruit.
À noter qu'un pointeur peut également contenir une adresse aléatoire (non initialisé), ou un pointeur NULL (la valeur entière 0, auquel cas delete est permis et n'a aucun effet), ou l'adresse d'un objet automatique (auquel cas ne *pas* appliquer delete), comme dans l'exemple suivant :
On Mon, 29 Dec 2003 01:52:20 +0100, Michel <michel@michel.com> wrote:
J'aimerais savoir si j'ai libéré toute la mémoire en faisant comme
suit:
Oui. A un new doit correspondre un delete et un seul ; et il en va
de même avec new[] et delete[].
Je pense que la question, plus précisément, portait sur le fait
qu'il fallait faire un delete sur une seule des variables contenant
l'adresse de l'objet à détruire. Je vais donc expliciter un peu,
désolé si j'ai mal compris la question.
Un pointeur stocke l'adresse d'un objet. L'opérateur delete se sert
de cette adresse pour détruire l'objet. Un objet ne doit être détruit
qu'une fois. Donc si deux pointeurs ont la même valeur, il ne faut
utiliser delete que sur l'un deux. Après quoi les deux pointeurs
/pointent/ vers un objet déjà détruit.
À noter qu'un pointeur peut également contenir une adresse aléatoire
(non initialisé), ou un pointeur NULL (la valeur entière 0, auquel cas
delete est permis et n'a aucun effet), ou l'adresse d'un objet
automatique (auquel cas ne *pas* appliquer delete), comme dans
l'exemple suivant :
J'aimerais savoir si j'ai libéré toute la mémoire en faisant comme suit:
Oui. A un new doit correspondre un delete et un seul ; et il en va de même avec new[] et delete[].
Je pense que la question, plus précisément, portait sur le fait qu'il fallait faire un delete sur une seule des variables contenant l'adresse de l'objet à détruire. Je vais donc expliciter un peu, désolé si j'ai mal compris la question.
Un pointeur stocke l'adresse d'un objet. L'opérateur delete se sert de cette adresse pour détruire l'objet. Un objet ne doit être détruit qu'une fois. Donc si deux pointeurs ont la même valeur, il ne faut utiliser delete que sur l'un deux. Après quoi les deux pointeurs /pointent/ vers un objet déjà détruit.
À noter qu'un pointeur peut également contenir une adresse aléatoire (non initialisé), ou un pointeur NULL (la valeur entière 0, auquel cas delete est permis et n'a aucun effet), ou l'adresse d'un objet automatique (auquel cas ne *pas* appliquer delete), comme dans l'exemple suivant :
On 31 Dec 2003 03:21:03 +0100, drkm <fr.comp.lang.c++@fgeorges.org> wrote:
Oui. A un new doit correspondre un delete et un seul ; et il en va de même avec new[] et delete[].
Je pense que la question, plus précisément, portait sur le fait qu'il fallait faire un delete sur une seule des variables contenant l'adresse de l'objet à détruire.
J'y ai répondu : il y a un seul new, donc un seul delete. C'est aussi simple que ça.
-- ;-)
On 31 Dec 2003 03:21:03 +0100, drkm <fr.comp.lang.c++@fgeorges.org>
wrote:
Oui. A un new doit correspondre un delete et un seul ; et il en va
de même avec new[] et delete[].
Je pense que la question, plus précisément, portait sur le fait
qu'il fallait faire un delete sur une seule des variables contenant
l'adresse de l'objet à détruire.
J'y ai répondu : il y a un seul new, donc un seul delete. C'est aussi
simple que ça.
On 31 Dec 2003 03:21:03 +0100, drkm <fr.comp.lang.c++@fgeorges.org> wrote:
Oui. A un new doit correspondre un delete et un seul ; et il en va de même avec new[] et delete[].
Je pense que la question, plus précisément, portait sur le fait qu'il fallait faire un delete sur une seule des variables contenant l'adresse de l'objet à détruire.
J'y ai répondu : il y a un seul new, donc un seul delete. C'est aussi simple que ça.
-- ;-)
drkm
Fabien LE LEZ writes:
On 31 Dec 2003 03:21:03 +0100, drkm <fr.comp.lang.c++@fgeorges.org> wrote:
Oui. A un new doit correspondre un delete et un seul ; et il en va de même avec new[] et delete[].
Je pense que la question, plus précisément, portait sur le fait qu'il fallait faire un delete sur une seule des variables contenant l'adresse de l'objet à détruire.
J'y ai répondu : il y a un seul new, donc un seul delete. C'est aussi simple que ça.
Bien sûr. Mais vu la question, et surtout ce que j'en ai compris, la précision me semblait importante, puisque le PO a l'air plutôt largué à ce niveau.
--drkm
Fabien LE LEZ <gramster@gramster.com> writes:
On 31 Dec 2003 03:21:03 +0100, drkm <fr.comp.lang.c++@fgeorges.org>
wrote:
Oui. A un new doit correspondre un delete et un seul ; et il en
va de même avec new[] et delete[].
Je pense que la question, plus précisément, portait sur le fait
qu'il fallait faire un delete sur une seule des variables contenant
l'adresse de l'objet à détruire.
J'y ai répondu : il y a un seul new, donc un seul delete. C'est
aussi simple que ça.
Bien sûr. Mais vu la question, et surtout ce que j'en ai compris,
la précision me semblait importante, puisque le PO a l'air plutôt
largué à ce niveau.
On 31 Dec 2003 03:21:03 +0100, drkm <fr.comp.lang.c++@fgeorges.org> wrote:
Oui. A un new doit correspondre un delete et un seul ; et il en va de même avec new[] et delete[].
Je pense que la question, plus précisément, portait sur le fait qu'il fallait faire un delete sur une seule des variables contenant l'adresse de l'objet à détruire.
J'y ai répondu : il y a un seul new, donc un seul delete. C'est aussi simple que ça.
Bien sûr. Mais vu la question, et surtout ce que j'en ai compris, la précision me semblait importante, puisque le PO a l'air plutôt largué à ce niveau.