Bonjour tout le monde,
je suis en train de me remettre au c++ après un gros détour vers d'autres langages plus... lents, on va dire
Et là je tombe sur une question existentielle. Je vous explique:
Je fais un petit programme. Il va comporter 3 classes de taille moyenne, ainsi que quelques petites fonctions et structures utilitaires. Ce programme est un "one shot": on le lance dans une console cmd, il fait des trucs, il génère son résultat, puis il se ferme.
Les trois classes en question accèdent à des ressources fortement susceptibles de générer des exceptions lors de leur accès. Heureusement pour moi, je peux me permettre d'accéder à ces ressources une fois, récupérer ce dont j'ai besoin, puis libérer cette ressource. Ces ressources sont des fichiers, de la base de donnée, et quelques appels à des web services.
Donc, j'ai opté pour du RAII: pour chacune de ces 3 classes, c'est lors de l'appel au constructeur que je récupère les données dont j'ai besoin. Et c'est là que j'ai un gros doute, car du coup, mon main() ressemble à ceci:
Ce qui me turlupine, c'est ce groc bloc try/catch dans le main. Depuis toujours, il me semblait que ce genre de pratique c'était très mal, mais aujourd'hui je suis incapable de dire pourquoi. Et cette façon de faire me convient particulièrement, au moins dans ce cas là: un petit programme qu'on lance une fois, dont l'exécution est rapide (quelques secondes normalement), et que si ça marche pas, on veut juste savoir pourquoi et relancer la commande.
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 int main(int argc, char** argv) { //... gestion des paramètres d'entrée try { GIS_Reader reader( argv[1] ); GIS_XemManager xem_manager( argv[2] ); GIS_Computer computer( reader, xem_manager ); computer.Compute(); } catch( exception & ex ) { // message d'erreur } }
Donc voilà, c'était juste pour savoir si vous savez pourquoi ce type de pratique est déconseillée, et si dans mon cas ça peut vraiment poser des problèmes.
Cordialement.
r0d.
Partager