RAII częściowo polega na decydowaniu, kiedy obiekt staje się odpowiedzialny za swoje własne czyszczenie - reguła jest taka, że obiekt staje się odpowiedzialny, jeśli i kiedy inicjalizacja konstruktora zakończy się. Symetria inicjalizacji i czyszczenia, konstruktor i destruktor, oznaczają, że oba są ze sobą ściśle powiązane.
Jednym z punktów RAII jest zapewnienie bezpieczeństwa wyjątków - aplikacja zachowuje spójność w przypadku zgłaszania wyjątków. Na pierwszy rzut oka jest to trywialne - gdy wyjątek powoduje zamknięcie zakresu, lokalne zmienne w tym zakresie muszą zostać zniszczone.
Ale co się stanie, jeśli rzut wyjątek występuje w konstruktorze?
Cóż, obiekt nie został w pełni zbudowany, więc nie można go bezpiecznie zniszczyć. Konstruktor powinien w razie potrzeby wypróbować bloki, aby zapewnić, że wszystkie niezbędne czyszczenia zostaną wykonane przed zgłoszeniem wyjątku. Gdy wyjątek stanie się spoza zakresu, w którym obiekt został skonstruowany, nie będzie wywołania destruktora, ponieważ obiekt nie został skonstruowany w pierwszej kolejności.
Rozważmy w szczególności konstruktorzy dla danych państw wewnątrz obiektu jest utylizowany. Jeśli jeden z tych, zgłasza wyjątek, Twój kod główny konstruktor nie będzie działać w ogóle - ale niektóre kod, który tworzy niejawny część tego konstruktora będzie miał. Wszelkie członków, które zostały pomyślnie wykonane zostaną automatycznie zniszczone. Każdy członek, które nie zostały wytworzone (włącznie z tym, który zwrócił wyjątek) nie.
Zasadniczo RAII to zasada, która gwarantuje, że wszystko, co zostanie w pełni zbudowane, zostanie zniszczone w odpowiednim czasie, szczególnie w przypadku wyjątków, i że każdy obiekt albo zostanie w pełni skonstruowany, albo nie jest (nie ma połowy zbudowane obiekty, które nie może wiedzieć, jak bezpiecznie oczyścić). Zasobów, które są przydzielane są również uwolniony. I dużo pracy jest zautomatyzowany, więc programista nie musi martwić się zbytnio o niego.