|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() |
Bonjour à tous !
Alors tout d'abord, je sais très bien que GOTO c'est le diable incarné sous forme de spaghettis maléfiques et je ne m'en suis jamais servit ...MAIS... J'aimerais savoir comment faire l'équivalent du code ci-dessous. Comment rediriger vers une zone où je vais delete tous les variables créées avec new, fermer tous les fichiers ouverts, close tous les handle de windows, etc, pour chaque erreur rencontrée. Tout ceci pour justement éviter de mettre 10 lignes de suppression de variables, etc... à chaque erreur rencontrée. Exemple : Code :
Du coup, si j'ai beaucoup de variables, fichiers ouverts, etc, dans une méthode, sa m'arrive de mettre beaucoup de lignes de cleanup à chaque fois et souvent les mêmes. Une autre solution serait de faire plein de if/else imbriqués, mais je vous raconte pas le bordel s'il y en a beaucoup. Des idées? Ou peut être que le goto est "acceptable" dans ce genre de situations? Merci d'avance, Clément. |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 185 ![]() |
Tu as l'exacte réponse dans ce tuto
Merci à Alexandre Laurent pour l'avoir écrit. Puisque tu es en C++, utilise les classes et la fonction magique dont chacune dispose: son destructeur Le RAII utilise cela pour nettoyer automatiquement toute ressource. L'idée est d'obtenir un pointeur/fichier/socket/troll à deux têtes dans le constructeur, et de le libérer dans le destructeur. À l'usage, le simple fait de déclarer/initialiser une variable, la ressource est acquise. Si l'acquisition est réussie, la variable sera détruite en sortant de sa portée, et donc la ressource libérée, sans aucun traitement particulier
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() |
Ok, Merci pour ta réponse.
J'avais déjà lu quelques trucs sur le RAII. En gros le RAII c'est les shared_ptr c'est ça? |
|
|
00
|
|
|
#4 | |
![]() ![]() |
Citation:
Cela signifie en anglais Ressource Aquisition Is Initialization (ou, si tu préfères en français: l'acquisition de ressources est initialisation). Ce qui nous intéresse en fait surtout (ce qui justifie ma remarque sur le "très mal nommé" Les shared_ptr sont une manière parmi d'autres de mettre ce concept en pratique. Tu peux très bien envisager de gérer toi meme correctement les ressources à la main, mais il est vrai que les pointeurs intelligents (car il n'y a pas que shared_ptr
__________________
en bas de page
|
|
|
|
10
|
|
|
#5 |
![]() ![]() Loïc JolyDéveloppeur informatique Inscription : août 2004 Messages : 4 675 ![]() |
Dans ton cas, le RAII, c'est surtout std::string pour gérer les chaînes de caractère, et [i/o]fstream pour lire les fichiers.
__________________
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11. |
|
|
00
|
|
|
#6 | |||
|
Expert Confirmé Sénior
![]() ![]() Emmanuel DelogetDéveloppeur informatique Inscription : septembre 2007 Messages : 1 826 ![]() |
Citation:
Code :
__________________
[FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...] Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi. Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça. Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas. Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas. |
|||
|
10
|
|
|
#7 |
|
Expert Confirmé
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 185 ![]() |
En C++, on ne devrait pas l'utiliser, parce qu'on dispose du RAII.
En C, c'est une toute autre histoire, et le goto peut être intéressant, quoique je m'en soit toujours passé.
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
|
10
|
|
|
#8 | |||
![]() ![]() |
Salut,
Citation:
Faut dire que, quand un prof qui fait une fois et demie ton poids te menace de te faire passer par la fenetre si tu l'utilises, ca te fait réfléchir Mais il est vrai que je n'ai jamais codé de kernel linux non plus A décharge des développeurs du kernel:
__________________
en bas de page
|
|||
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() |
Merci pour vos réponses, je passe le post en résolu
|
|
|
00
|
|
|
#10 | |
|
Expert Confirmé Sénior
![]() ![]() Emmanuel DelogetDéveloppeur informatique Inscription : septembre 2007 Messages : 1 826 ![]() |
Citation:
Le fait est que goto est dangereux si on l'utilise mal. Mais correctement utilisé (en C, bien sûr ; C++ a RAII et ça permet d'éviter toute utilisation de goto), c'est un outil puissant qui simplifie le code avec un coût extrèmement faible au runtime (puisque dans la grande majorité des cas, c'est juste un jump conditionnel).
__________________
[FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...] Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi. Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça. Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas. Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas. |
|
|
20
|
|
|
#11 | ||
![]() ![]() |
Citation:
Citation:
Mais j'avais déjà émis cet opinion, il y a bien longtemps, je ne fais que me répéter ici
__________________
en bas de page
|
||
|
|
00
|
|
|
#12 | ||
![]() ![]() Loïc JolyDéveloppeur informatique Inscription : août 2004 Messages : 4 675 ![]() |
Je tiens juste à préciser qu'en plus d'être moins utile en C++ qu'en C, le goto est aussi plus dangereux à utiliser en C++. Exemple :
Code :
__________________
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11. |
||
|
|
00
|
|
|
#13 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : novembre 2005 Messages : 4 970 ![]() |
Citation:
Goto considered harmfull, Dijkstra, 1968. Linus Benedict Torvalds, né le 28 décembre 1969.
__________________
Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça. |
|
|
|
10
|
|
|
#14 | |
![]() ![]() |
Citation:
![]()
__________________
en bas de page
|
|
|
|
00
|
|
|
#15 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : novembre 2005 Messages : 4 970 ![]() |
Depuis lors, l'utilisation non structurée du goto n'est plus en odeur de sainteté nulle part. Les langages ont acquis les structures de contrôle permettant de s'en passer (comparer sur ce point FORTRAN 66 et FORTRAN 77 par exemple) et le seul point réellement discuté, c'est de savoir si elles suffisent et que tout usage doit être prohibé ou s'il y a encore une place pour certains cas mal gérés par les structures classiques. L'utilisation dans Linux relève de cette dernière opinion.
__________________
Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com