Bu soru oldukça eski olmasına ve zaten bolca yanıtlanmış olmasına rağmen, istisnalar hakkındaki tartışmalarda bunu sürekli olarak kaçırdığım için C ++ 11'de uygun istisna işlemenin nasıl yapılacağına dair bir not eklemek istiyorum:
StackOverflow'da burada ve burada açıklanmaktadır, istisnalarınız hakkında nasıl geriye dönük izleme yapabilirsiniz? bir hata ayıklayıcıya veya zahmetli günlüğe gerek duymadan kodunuzdaki istisnalarınız hakkında, yalnızca iç içe geçmiş istisnaları yeniden atacak uygun bir istisna işleyicisi yazarak anlatılmaktadır.
Bunu herhangi bir türetilmiş istisna sınıfı ile yapabileceğiniz için, böyle bir geri izlemeye birçok bilgi ekleyebilirsiniz! Ayrıca bir geri izleme şunun gibi görüneceği GitHub'daki MWE'me de bakabilirsiniz:
Library API: Exception caught in function 'api_function'
Backtrace:
~/Git/mwe-cpp-exception/src/detail/Library.cpp:17 : library_function failed
~/Git/mwe-cpp-exception/src/detail/Library.cpp:13 : could not open file "nonexistent.txt"
Alt sınıfa bile ihtiyacın yok std::runtime_error
Bir istisna oluştuğunda bol miktarda bilgi almak .
Alt sınıflamada gördüğüm tek fayda (sadece kullanmak yerine std::runtime_error
), istisna işleyicinizin özel istisnanızı yakalayıp özel bir şey yapabilmesidir. Örneğin:
try
{
// something that may throw
}
catch( const MyException & ex )
{
// do something specialized with the
// additional info inside MyException
}
catch( const std::exception & ex )
{
std::cerr << ex.what() << std::endl;
}
catch( ... )
{
std::cerr << "unknown exception!" << std::endl;
}