Thread overview
C++ RAII
Apr 27, 2018
hsencan
Apr 27, 2018
kerdemdemir
April 27, 2018

Merhabalar,

C++ ta daha önce smart pointers konusunu inclerken karşılaştığım "RAII" kavramı , şimdide mutex' konusuna bakarken tekrar ismini gördüm bu kavramın. (Araştırabildiğim kadarı ile) Kendisi bir kaynak yönetim biçimi. Bellekten tahsis ettğimiz objelerin hata olması durumunda bile yıkıcı fonksiyonlarını çağıyormuş. Peki bunun garbage collector dan ne farkı var ? Ve neden c++ ta birçok yerde kullanılmıyor ? (Belki kullanılıyordur ama ben sadece 2 defa gördüm.)

İyi Çalışmalar

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 27, 2018

Benim acaba Ali Abi varken çok aktif cevap yazmam hoş oluyor mu bilmiyorum. Ama bildiğimi sandığım konularda sorduğun için yazmak istiyorum.

Benim RAII konusunda anladığım aslında çok basit Consturctor'da aldığını Destructor'da ver. İsminin çok havalı olması biraz kompleks bir özellikmiş gösteriyor fakat bildiğin C++ 'in objenin ömrünün bittiğinde Destructor çağrılması üstüne kurulan bir düşünüş biçimi hariç bir şey değil.

Çöp toplayıcıdan farkı RAII bir masrafı yok , işte ani performans düşüşleri yok. Aslında bu iki konu çok da bağlantılı değil çünkü RAII sadece hafıza ile ilgili değil. Basitce dosyamı açtın CTOR 'de o zaman DTOR'de kapat. Veya mutex 'mi kilitledin o zaman DTOR'de aç. Hafıza bu konulardan sadece birisi memory'i mi aldın heap'den DTOR'de ver. RAII ile bütün hafıza sorunlarımızı çözemeyiz örneğin

int* a = new a; // şimdi dtor yok birşey yok delete demezsem leak olcak RAII buralarda söz konusu değil

shared_ptr<int> a = std::make_shared<int>(5);
// çöp toplayıcı örneği vermek zor olacağı için başka bir hafıza yönetim biçimi
//ile örnek vermek istedim. Sorun yok delete demesem bile

Çöp toplayıcı çok derin bir konu. Ama RAII ile farkları konusunda çok az yardımcı olmuştur yukarda yazdıklarım umarım.

Alıntı:

>

Ve neden c++ ta birçok yerde kullanılmıyor

RAII C++ çok fazla kullanılıyor. Aslında DTOR 'de ne zaman birşeyler yapsan çoğu ihtimalle RAII felsefesini kullanmış oluyorsun.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 27, 2018
  1. RAII nesnenin yaşamı sona ererken sonlandırır; çöp toplayıcı ilerideki belirsiz bir zamanda sonlandırır

  2. RAII destructor'ı kesinlikle işletir; çöp toplayıcı hiç işletmeyebilir ve hatta belki de yalnızca belleği geri verir

Alıntı:

>

neden c++ ta birçok yerde kullanılmıyor

C++'ın en büyük sorunlarından birisi bu: Doğru C++ kullanılan her yerde kullanılıyor. Eğer aşağıdaki gibi C++ görüyorsan o tür kaynaklardan uzak durmalısın çünkü RAII olmadan doğru C++ olamaz.

void foo() {
   auto p = bir_kaynak_ayir();
   // ...
   kaynagi_geri_ver(p);
}

Öyle C++ işlevi yazan programcı henüz doğru C++ üretmiyor demektir çünkü ... ile belirtilen yerden hata atılabilir. (Bugün atılmıyorsa yarın atılabilir.)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 28, 2018

Alıntı (kerdemdemir):

>

Benim acaba Ali Abi varken çok aktif cevap yazmam hoş oluyor mu bilmiyorum.

Erdemcim, böyle konuyla ilgisiz şeyler eklemezsen yazdıkların daha güzel okunuyor. ;)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]