Resource Acquisition Is Initialization

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

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. Jest to także prawdą przy wystąpieniu wyjątku. RAII jest kluczową koncepcją przy pisaniu kodu odpornego na wyjątki.

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) może być również kontrolowana za pomocą RAII. Do tego celu biblioteka standardowa C++11 definiuje 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 oznaczony jako przestarzały) i boost::shared_ptr z bibilioteki Boost lub Loki::SmartPtr z biblioteki Loki.