fonction qui retourne un pointeur - C++ - Programmation
Marsh Posté le 05-04-2007 à 22:55:11
Huh? Je te retourne la question?
Cet objet a peut-être un parent/propriétaire qui se chargera de le détruire lors de la destruction du parent? Sans plus de contexte... Il faut faire un delete.
Mais avec plus de contexte, peut-être pas (bien que ça ne devrait pas mettre à mal le système, mais être un raccourci pour le développeur).
Marsh Posté le 05-04-2007 à 22:59:39
Il faut lire la documentation de la fonction. En tout cas, je trouve que c'est une mauvaise chose que de retourner un pointeur s'il est interdit de le désallouer. En renvoyant alors une référence, on aurait surement éviter quelques erreurs.
Marsh Posté le 06-04-2007 à 09:18:46
Et en renvoyant une référence, que ce passe t-il exactement ?
un objet est déclaré à l'intérieur de la fonction, mis sur la pile, puis une référence à cet objet est renvoyé? pourquoi cette référence resterait-elle valable une fois que la fonction est terminé ? j'aurais justement tendance à penser que cette référence n'est plus valable.
PS: ça fait deux ans que je n'ai pas codé en C++, j'ai oublié certain principe de base.
Marsh Posté le 06-04-2007 à 10:09:18
boost::shared_ptr et ses confrères me semblent de bon
http://boost.org/libs/smart_ptr/smart_ptr.htm
ca evitera de se posser cette sempiternelle question de delete ou pas
Marsh Posté le 06-04-2007 à 14:34:25
weblook$$ a écrit : un objet est déclaré à l'intérieur de la fonction, mis sur la pile, puis une référence à cet objet est renvoyé? pourquoi cette référence resterait-elle valable une fois que la fonction est terminé ? j'aurais justement tendance à penser que cette référence n'est plus valable. |
Effectivement, dans ce cas, elle n'est plus valable.
Si la variable était static, la référence serait valide.
Mais ceci n'est pas spécifique aux références, les pointeurs se comportent de manière équivalente.
Marsh Posté le 06-04-2007 à 16:20:53
un new à l'intérieur d'une fonction alloue sur de la mémoire sur le tas pourtant, donc reste valide une fois la fonction terminée.
Marsh Posté le 07-04-2007 à 15:32:36
IrmatDen a écrit : Huh? Je te retourne la question? |
hum oui probable, c'est un toolkit que j'utilise donc je sais pas trop comment c'est gauler ,( je sais y a la doc mais bon...)
Marsh Posté le 07-04-2007 à 22:17:29
Code :
|
effectivement , avec ce genre de code , pas de delete dans le main pour le pointeur retourné
Marsh Posté le 07-04-2007 à 22:22:17
faut pas retourner un pointeur mais une référence dans ce cas
Marsh Posté le 07-04-2007 à 22:34:51
Non car je me retrouverais avec
A enfant
et le compilo broncherait à cause du virtual pure
Marsh Posté le 07-04-2007 à 22:44:06
normal, tu mens au compilateur, il se venge.
edit: (je répondais à un post effacé, pas grave)
edit2: arrête d'éditer test posts en permanence, on a pas que ça à faire de relire chaque fois tous les posts depuis le début et voir ce qui change.
Marsh Posté le 07-04-2007 à 22:47:55
et d'un autre coté, ton code est foireux :
*/ child n'est pas initialisé
*/ deux appels a creerEnfantUnique et, hop, un memoryleak
Marsh Posté le 07-04-2007 à 22:51:56
Oui, et la class A est mon avis inutilisable - ou alors c'est un design plus complexe dont on en voit qu'un bout ici.
Et le test avant le delete est inutile.
Marsh Posté le 07-04-2007 à 22:53:37
Code :
|
Marsh Posté le 07-04-2007 à 22:59:05
désolé pour les "édit" mais ça évite de laisser des erreurs inutiles
Marsh Posté le 05-04-2007 à 21:41:32
Bonjour,
j'ai une fonction
COb * f();
dans mon code je fais ça :
COb * o = f();
Pourquoi ne dois-je pas faire de delete ?
Merci