Aşağıda gördüğümüz kod geleneksel kaynak erişim ve kaynakların iade edilmesine ilişkin bir örnek senaryodur. Burda 1 numaralı alanda kaynaklar ediniliyor sonra bu kaynaklarla belirli işlemler gerçekleştiriliyor ve ardından 2 numaralı alanda kaynaklar iade ediliyor. Burada 2 tane senaryoya dikkat çekmek gerekiyor. Birincisi yazılım geliştiricisinin kaynaklarının iadesini UNUTMASI, ikincisi ise kaynakları iade etmeden exceptiona neden olunacak bir işlemin gerçekleşmesi ya da return edilmesi gibi durumlar. İşte bu noktada RAII devreye giriyor ve bu problemlerin çözümüne ilişkin bir senaryoyla karşımıza çıkıyor.
RAII idiyomu diğer bir değişle Resource Acquisition Is Initialization C++' ta popüler bir kaynak yönetim şekli. C++'ta sınıflara ilişkin nesneler yaratılırken constructor ile hayata gelir ve objenin ömrü bittiğinde destructor çağrılarak alınan kaynaklar teslim edilir. Çoğunlukla nesneler local scope içerisinde yaratılırlar ve scope'tan çıkıldığında (normal akışında, return veya exception) ömürleri de biter. Fakat bazı nesneler ise new anahtar kelimesi ile oluşturulur ki heap'de dinamik hafıza alanında yer tahsis edilerek oluşturulur. Ve delete anahtar kelimesi ile destructor çağrısı yapılarak kaynaklar iade edilir. Bu yaşam döngüsü RAII idiyomunun dışındadır. RAII ismi aslında idiyoma doğru bir karşılık gelen ifade değildir. Aslında idiyomun anlatmak istediği aşağıdaki gibi bir isimlendirme ile daha doğru olarak karşılanacaktır.
RAII'nin faydaları:
- Exception Safety: exception safe bir kaynak yönetimi sağlamaya olanak sağlayacaktır.
- Clean Code: kaynakların tahsis edilmesi ile iade edilmesi aynı sınıf içerisinde gerçekleşeceği için temiz bir kod yazımına olanak sağlayacaktır.
- Encapsulation: kaynakların yönetimi her sınıfın kendi içerisinde ve dışarıdan erişimi mümkün olmadan sağlandığı için bir encapsulation sağlayacaktır.