RAII kısmen, bir nesnenin kendi temizliğinden ne zaman sorumlu olacağına karar vermekle ilgilidir - kural, yapıcısı başlatma işlemi tamamlandığında ve ne zaman tamamlandığında nesnenin sorumlu hale gelmesidir. Başlatma ve temizleme, yapıcı ve yıkıcı simetrisi, ikisinin birbiriyle yakın bağları olduğu anlamına gelir.
RAII'nin bir noktası, istisna güvenliği sağlamaktır - istisnalar atıldığında uygulamanın kendi kendine tutarlı kalması. İlk bakışta bu önemsizdir - bir istisna bir kapsamın çıkmasına neden olduğunda, o kapsamdaki yerel değişkenlerin yok edilmesi gerekir.
Ancak, istisna atımı bir kurucu içinde gerçekleşirse ne olur?
Nesne tam olarak inşa edilmedi, bu yüzden güvenli bir şekilde yok edilemez. Oluşturucu, istisna oluşturulmadan önce gerekli temizlemelerin yapılmasını sağlamak için gereken şekilde blokları denemelidir. İstisna, nesnenin inşa edildiği kapsamın dışında propogasyona uğradıktan sonra, herhangi bir yıkıcı çağrısı olmayacaktır, çünkü nesne ilk etapta inşa edilmemiştir.
Özellikle tahrip edilecek nesnenin içindeki üye verileri için yapıcıları düşünün. Bunlardan biri bir istisna atarsa, ana kurucu kodunuz hiç çalışmaz - ancak bu kurucunun örtük bir parçasını oluşturan bazı kodlar olacaktır. Başarıyla oluşturulmuş üyeler otomatik olarak imha edilecektir. İnşa edilmemiş üyeler (istisna atan üyeler dahil) değildir.
Yani temelde RAII, tamamen istisna edilen her şeyin, özellikle istisna atışlarının varlığında zamanında tahrip edilmesini ve herhangi bir nesnenin tamamen inşa edilmesini veya yapılmamasını (yarı- nasıl güvenli bir şekilde temizleneceğini bilemeyeceğiniz inşa edilmiş nesneler). Tahsis edilen kaynaklar da serbest bırakılır. Ve işlerin çoğu otomatiktir, bu yüzden programcı bu konuda fazla endişelenmek zorunda değildir.