Merci pour vos réponses. Je vais essayer de répondre à certaines d'abord.
Citation:
- pointeur nu, c'est moche (ton code n'est pas du tout exception free)
c'est quoi un pointeur nu?
Citation:
- pourquoi un pointeur tout court ?
que veux tu dire par pointeur tout court?
Citation:
- pourquoi créer l'objet dans un fonction et pas directement (et passer une référence donc)
Parce que c'est ce qui se passe dans le code de la fonction avec les switch.
Citation:
- respect de la "règle" : "celui qui créé, c'est celui qui détruit" ?
Je suis ok. Mais dans le cas de mon premier poste, ce n'était pas le cas. Le code du premier poste ne vient pas de moi (celui avec les switch).
Citation:
Bref, c'est à mon sens du code typique à bannir :
Ouais, ben c'est du code qui existe dans un logiciel d'une grande boite.
---------------------------------
Citation:
le pointeur en paramètre n'est pas utilisé
et alors? bon, c'est vrai, c'est pas top.
Citation:
le pointeur créé avec new et retourné n'est pas assigné
exact. C'est là qu'est la fuite de mémoire. Je suis allé un peu trop vite.
Citation:
tu delete un objet NULL
Ceci est autorisé par la norme du C++.
Je pense que ceci est mieux:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
std::list<int>* fussnc(void)
{
std::list<int>* temporaire=new std::list<int>();
return (temporaire);
}
int main()
{
Fil2 * zff=new Fil2(1,5);
union DATATYPE Values = { zff }; // iValue = 10
std::list<int> *fsdf=0;
fsdf = fussnc();
delete fsdf;
} |
Citation:
Désolé si je me méprends, mais j'ai l'impression en te lisant que tu penses q'un delete p supprime p, or cela libère la mémoire pointée par p. Le pointeur lui même continue à exister après et sera supprimé automatiquement s'il a été crée sur la pile ou à l'aide d'un delete s'il a lui même été crée sur le tas. En espérant ne pas t'avoir embrouiller.
Je suis d'accord, mais je vois en quoi consiste la libération de la mémoire pointée par p. Par contre, je vois pas trop ce que signifie "supprimer une variable". Si tu libère la mémoire pointée par un pointeur, alors le pointeur pointe dans le vide. C'est pour cette raison qu'on fait builditer=0 pour pas avoir ce phénomène.