Meskipun pertanyaan ini agak tua dan sudah banyak dijawab, saya hanya ingin menambahkan catatan tentang bagaimana melakukan penanganan pengecualian yang tepat di C ++ 11, karena saya terus melewatkan ini dalam diskusi tentang pengecualian:
Ini dijelaskan di StackOverflow di sini dan di sini , bagaimana Anda bisa mendapatkan pelacakan balik pada pengecualian Anda di dalam kode Anda tanpa perlu debugger atau logging rumit, cukup dengan menulis penangan pengecualian yang tepat yang akan menampilkan kembali pengecualian bertingkat.
Karena Anda dapat melakukan ini dengan kelas pengecualian apa pun, Anda dapat menambahkan banyak informasi ke penelusuran mundur seperti itu! Anda juga dapat melihat MWE saya di GitHub , di mana backtrace akan terlihat seperti ini:
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"
Anda bahkan tidak perlu membuat subkelas std::runtime_error
untuk mendapatkan banyak informasi saat pengecualian dilempar.
Satu-satunya keuntungan yang saya lihat di subclassing (daripada hanya menggunakan std::runtime_error
) adalah bahwa penangan pengecualian Anda dapat menangkap pengecualian khusus Anda dan melakukan sesuatu yang istimewa. Sebagai contoh:
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;
}