Selamün Aleyküm;
C++'da bilindiği üzere try-catch blokları var lakin try-finally blokları yoktur. Eğer ki C++'da try-finally blokları olsaydı unique_ptr ve shared_ptr gibi şablonlara hala daha ihtiyacımız olur muydu?
Mesela unique_ptr ile alanı belleğe geri iade edemediğimiz durumlarda unique_ptr vs. kullanabiliyoruz:
void foo()
{
int* n = new int; // heap alanından bellek ayırdık ve bu nesne ile işimiz bitince silmemiz lazım.
...
// Eğer delete n şeklinde belleğe geri vermezsek belleğimizi gereksiz yere şişiriyor olabilir.
// Ama delete n diyemeden return vs. ile fonksiyondan çıkarsak belleği geri iade edemiyoruz.
}
int main()
{
foo();
}
// Bunun yerine unique_ptr şablonunu kullanalım:
void foo()
{
std::unique_ptr<int> n(new int);
...
// Şimdi bu fonksiyondan çıkınca n nesnesi silinecek.
}
Diğer yandan Object Pascal dilinde try-finally ile bu işi çözebiliyoruz:
procedure Foo;
var
N : ^Integer;
begin
New(N); // Bellek ayırdık.
...
try
...
finally // Herhangi bir durumda fonksiyondan çıkılsa bile finally bloğu çalışacak.
Dispose(N); // Alanı belleğe geri iade ettik.
end;
end;
Yani C++'da da try-finally olsa akıllı işaretçilere de gerek kalmaz mı acaba? Siz olsanız hangi yöntemi tercih edersiniz? Ya da başka bir yöntem mi tercih edersiniz?
Teşekkürler!
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]