Resource Acquisition Is Initialization
Resource acquisition is initialization (inicjowanie przy pozyskaniu zasobu), w skrócie RAII – popularny wzorzec projektowy w C++ i D. Technika łączy przejęcie i zwolnienie zasobu z inicjowaniem i usuwaniem zmiennych.
Przejęcie zasobu jest połączone z konstrukcją, a zwolnienie z automatyczną destrukcją zmiennej. Ponieważ wywołanie destruktora jest automatyczne, gdy zmienna wyjdzie poza swój zasięg, jest zagwarantowane, że zasób zostanie zwolniony od razu, gdy skończy się czas życia zmiennej. Stanie się tak również przy wystąpieniu wyjątku. RAII jest kluczową koncepcją przy pisaniu kodu odpornego na błędy.
Technika RAII jest używana na przykład przy zakładaniu blokad wątków albo obsłudze plików.
Własność pamięci przydzielanej dynamicznie (za pomocą new w C++) może być również kontrolowana za pomocą RAII. Do tego celu biblioteka standardowa C++11 definiuje inteligentne wskaźniki: std::unique_ptr dla obiektów z jednym właścicielem oraz std::shared_ptr dla obiektów współdzielonych. Podobny efekt można uzyskać także za pomocą std::auto_ptr (z C++98, aktualnie usunięty ze standardu) i boost::shared_ptr z biblioteki Boost lub Loki::SmartPtr z biblioteki Loki.