Bir kapsayıcı için bir yedek yazı yazıyorum ve yerine tüm istisna garantileri yerine çalışıyorum. Şu anda clear
yöntemini yazıyorum ve bir imha makinesinin bir istisna atıyor olsa bile, mümkün olduğunca tamamlamak ve her zaman tutarlı bir durumda kabı bırakmak istiyorum. Ayrıca temizledikten sonra, tercihen dilimleme olmadan istisnasını yeniden düzenlemek istiyorum.Bir istisna nesnesi ne zaman imha edilir (ve kontrol edilebilir)?
Bu bana soruya getiriyor; Bir istisna ne zaman imha edildi? Tek bir denemeye bakalım: Örnek için bu basitleştirilmiştir.
void container::clear()
{
bool had_exception = false;
std::exception* exp;
internal_set_empty(); // this cant throw
while(! internal_done())
{
try
{
internal_destruct_next(); // this might throw if T::~T() throws
}
catch(std::exception& e)
{
had_exception = true;
exp = &e;
}
}
if(had_exception)
throw *exp;
}
ben istisna muhtemelen o ele dikkate alındığında tahrip çünkü bu, kötü başarısız bekliyoruz ve bu teknik olarak rethrow değil.
Başka bir girişim istisnanın bir kopyasını alırken, Dilim olmasını beklerim.
Özel durumun ömrünü uzatmanın bir yolu var mı? Böylece daha sonra yeniden düşünebilir miyim? Mümkünse, catch(...)
aracılığıyla yakalanan istisnaları yeniden değerlendirmek istiyorum.
http: // en.Senaryo çalışabilirse cppreference.com/w/cpp/error/exception_ptr kullanışlı olabilir. – Mat
@Mat 'exception_ptr' tam olarak aradığım şey gibi görünüyor, ama daha temel bir sorun var gibi görünüyor. – sp2danny