Skip to content

Acquisition de ressources par initialisation

L'ouvrage de référence du C++, dans lequel la méthode est exposée

"L'acquisition de ressources par initialisation" est aussi appelée "L'acquisition de ressource, c'est l'initialisation", traduction directe de l'anglais "ressource acquisition is initialization" (RAII).


Il s'agit d'une technique de programmation qui permet une gestion automatique des ressources informatiques (mémoire, fichiers, locks, connexion à une API, ...). Elle permet en effet d'assurer la libération immédiate des ressources lorsque celles-ci ne sont plus utiles, que ce soit dans le cadre d'un fonctionnement normal ou bien de conditions exceptionnelles (erreurs).


Cette technique est apparue à la suite de discussions sur l'évolution du langage C++ (début des années 90 si ma mémoire ne me fait pas défaut). Certains souhaitaient l'intégration dans C++ d'un mécanisme de ramasse-miettes (garbage collector = gestion automatique de la mémoire), mécanisme déjà présent dans des langages comme LISP. Finalement la technique d'acquisition de ressources par initialisation s'est imposée face à cette approche.


L'efficacité (libération de ressource immédiate), la robustesse et l'universalité (pas uniquement utilisable pour la mémoire) de l'acquisition de ressources par initialisation explique que, bien qu'il existe de bonnes solutions de ramasse-miettes pour C++, ces dernières ne soient jamais devenues populaires.


La technique repose sur la création d'objet dans le tas (heap) et sur un mécanisme de destructeurs appelés automatiquement. Si C++ connaît ces notions, des langage moins complets comme Java ne permettent pas de mettre en place cette technique, il faut alors se contenter du ramasse-miette.


L'article sur Wikipedia

Les pages c++ de Bjarne Stroustrup, voir en particulier les FAQs

Continuer à lire "Acquisition de ressources par initialisation"