Melontar Pengecualian daripada Pemusnah: Dilema Pengecualian Bersarang
Dalam C , melontarkan pengecualian daripada pemusnah menimbulkan cabaran tertentu. Apabila pemusnah digunakan, ada kemungkinan pengecualian lain sudah aktif. Kekaburan ini menimbulkan persoalan tentang cara mengendalikan situasi sedemikian.
Secara tradisinya, C telah bergantung pada panggilan std::terminate atau std::terminate_handler apabila pengecualian dilemparkan daripada pemusnah. Pendekatan ini memastikan bahawa sebarang pengecualian aktif ditamatkan dengan tegas.
Walau bagaimanapun, C 11 memperkenalkan std::nested_exception, ciri yang membolehkan sarang pengecualian. Ia pada mulanya dianggap sebagai penyelesaian yang berpotensi untuk mengendalikan pengecualian daripada pemusnah. Dengan meletakkan pengecualian baharu dalam pengecualian aktif, isu keutamaan pengecualian boleh diselesaikan.
Walaupun potensinya, idea ini tidak diterima pakai dalam C 11 atau C 14. Keputusan telah dibuat untuk mengekalkan tingkah laku asal daripada memanggil std::terminate.
Kebaikan dan Keburukan Pengecualian Bersarang
Walaupun pengecualian bersarang menawarkan kelebihan untuk mengekalkan maklumat daripada kedua-dua pengecualian, ia juga datang dengan potensi kelemahan . Sebagai contoh, ia boleh memperkenalkan kesan sampingan yang tidak dijangka atau mengganggu kelakuan std::terminate yang dijangkakan.
Penyelesaian Alternatif
Pada masa ini, tiada rancangan untuk melawat semula penggunaan pengecualian bersarang untuk mengendalikan pengecualian daripada pemusnah dalam C 17. Sebaliknya, pendekatan alternatif disyorkan, seperti:
Atas ialah kandungan terperinci Perlukah Pengecualian Bersarang Digunakan untuk Mengendalikan Pengecualian yang Dilemparkan daripada Pemusnah dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!