Libération d'un pointeur lorsqu'il est utilisé dans 1 return
Bonjour à tous,
J'ai un problème pour la libération d'un pointeur...
Comment je fais pour libérer un pointeur d'une fonction sachant que je le renvoie par un return...
Le code après le return va être ignoré, alors, ou puis-je mettre mon delete?
C'est peut-etre pas très clair, donc voici un petit exemple :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
MFDPOSS* intersectionMF(MFDPOSS *tmpdposs)
{
LIST* list_inter;
list_inter = new LIST;
// traitements permettant de calculer list_inter
return new MFDPOSS(list_inter);
} |
Comment je fais pour libérer le pointeur list_inter puisque je l'utilise dans mon return? Je crois qu'on peut le faire dans le destructeur de ma classe LIST, mais je ne suis pas sur de la manière de le faire.
Merci pour votre aide!
:wink:
Re: Libération d'un pointeur lorsqu'il est utilisé dans 1 re
Citation:
Envoyé par choinul
Code:
1 2 3 4 5 6 7 8 9 10
| MFDPOSS* intersectionMF(MFDPOSS *tmpdposs)
{
LIST* list_inter;
list_inter = new LIST;
// traitements permettant de calculer list_inter
return new MFDPOSS(list_inter);
} |
Si j'ai bien compris (et donc en supposant que MFDPOSS n'a pas besoin du contenu de la liste par apres) , version bete est mechante:
Code:
1 2 3 4 5 6 7 8 9 10 11
| MFDPOSS* intersectionMF(MFDPOSS *tmpdposs)
{
LIST* list_inter;
list_inter = new LIST;
// traitements permettant de calculer list_inter
MFDPOSS* result = new MFDPOSS(list_inter);
delete list_inter;
return result;
} |
version SL
Code:
1 2 3 4 5 6 7 8 9 10
| MFDPOSS* intersectionMF(MFDPOSS *tmpdposs)
{
std::auto_ptr<LIST> list_inter;
list_inter = new LIST;
// traitements permettant de calculer list_inter
return new MFDPOSS(list_inter.get());
} |
Version Jean-Marc
Code:
1 2 3 4 5 6 7 8
| MFDPOSS* intersectionMF(MFDPOSS *tmpdposs)
{
LIST list_inter;
// traitements permettant de calculer list_inter
return new MFDPOSS(&list_inter);
} |
Re: Libération d'un pointeur lorsqu'il est utilisé dans 1 re
Citation:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
MFDPOSS* intersectionMF(MFDPOSS *tmpdposs)
{
LIST* list_inter;
list_inter = new LIST;
// traitements permettant de calculer list_inter
MFDPOSS* result = new MFDPOSS(list_inter);
delete list_inter;
return result;
} |
Oui, mais là, je ne fais que transférer le problème sur result... Comment je fais alors pour deleter result?
Citation:
Code:
1 2 3 4 5 6 7 8
| MFDPOSS* intersectionMF(MFDPOSS *tmpdposs)
{
LIST list_inter;
// traitements permettant de calculer list_inter
return new MFDPOSS(&list_inter);
} |
Oui, mais je perd les avantages des pointeurs...
Je vais peut-etre me mettre aux pointeurs intelligents, alors!
Pourquoi tout le monde conseille les pointeurs intelligents "boost" mais que dans les exemples, ce sont les pointeurs intelligents "std::auto_ptr" qui sont le plus souvent utilisé?
Merci encore pour vos réponses! :D