Bir RAII nesnesi yapıyorum ve bu nesne yapılamıyor olabilir. Bunu nasıl halledebilirim? Bir RAII nesnesi oluşturulamadığında
try {
std::vector<int> v(LOTS);
// try scope ends here because that's what the catch is for
} catch(const std::bad_alloc&) {
// ...
}
// v? what v?
std::vector
varsayılan kurucu atmaz ve bu yardımcı olabilir, Verilen, ancak bu genel bir durum değildir. Bir kurucu çok iyi atabilir. Herhangi bir kaynak edinme hatasıyla başa çıkmak istiyorsam,
atma yapmıyorsa devam edebilmek için bunu nasıl yapabilirim?
Düzeltme: Açıklığa kavuşturmak gerekirse, bir kaynak edinme başarısız olursa, tekrar denemek isteyebilirim. Belki alternatif bir kaynak edinmeyi deneyebilirim.
tam emin değilim. V kullanan kod, try bloğunda olmalıdır. – Dialecticus
Soruyu anladığım gibi, 'v' yapıcısındaki bir istisnadan kurtulabilmek için, 'v'' try' kapsamının içinde beyan edilmek zorundadır; * catch * bloğundan sonra * görünür. Yani eğer bir elinizde v vekili oluştururken bir istisnayı "göz ardı edebilecek" ve eğer diğer yandan da "v" yi kullanabiliyorsa, bu biraz zorlaşırsa – jalf
Kaynak edinme başarısız olur, ancak istisna yayılmasına izin vermektense bunun yerine başka bir kaynakla yapabilirim. Ve eğer bu ikinci kaynak başarısız olursa belki başka bir fikrim var, vb. Ne tür bir yaklaşım sergilediğim önemli değil. RAII, arızanın nasıl giderileceğini değil, arıza durumunda nasıl temizleneceğini açıklar. – wilhelmtell