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 :
Ceci est un exemple bête et méchant, mais actuellement et sans Goto, à chaque fois qu'une condition n'est pas remplie, je fait tous les delete nécessaires + return.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 int main(int argc, char* argv[]) { char* test1 = NULL; char* test2 = NULL; char* test3 = NULL; FILE* file1 = NULL; FILE* file2 = NULL; test1 = new char[argc*15]; test2 = new char[argc*37]; test3 = new char[argc*66]; f1 = fopen("C:\\Test.txt", "rb"); f2 = fopen("C:\\Tset.txt", "rb"); if( !1=1 ) goto cleanup; else { // Do Something } if( !2=2 ) goto cleanup; else { // Do Something } if( !3=3 ) goto cleanup; else { // Do Something } if( !3=3 ) goto cleanup; else { // Do Something } cleanup: if(test1) delete[] test1; if(test2) delete[] test2; if(test3) delete[] test3; if(f1) fclose(f1); if(f2) fclose(f2); return 0; }
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.
Partager