Cara konvensional untuk melempar dan menangkap pengecualian adalah dengan melempar objek pengecualian dan menangkapnya dengan referensi (biasanya constreferensi). Bahasa C ++ memerlukan kompilator untuk menghasilkan kode yang sesuai untuk membangun objek pengecualian dan membersihkannya dengan benar pada waktu yang tepat.
Melempar pointer ke objek yang dialokasikan secara dinamis bukanlah ide yang bagus. Pengecualian seharusnya memungkinkan Anda menulis kode yang lebih kuat saat menghadapi kondisi kesalahan. Jika Anda melempar objek pengecualian dengan cara konvensional, Anda dapat yakin bahwa objek tersebut ditangkap oleh klausa catch yang menamai tipe yang benar, oleh a catch (...), apakah objek tersebut kemudian dilempar kembali atau tidak, objek tersebut akan dihancurkan dengan benar pada waktu yang tepat. (Satu-satunya pengecualian adalah jika tidak pernah tertangkap sama sekali tetapi ini adalah situasi yang tidak dapat dipulihkan, bagaimanapun cara Anda melihatnya.)
Jika Anda melempar pointer ke objek yang dialokasikan secara dinamis, Anda harus memastikan bahwa apa pun tampilan stack panggilan pada titik yang Anda inginkan untuk menampilkan pengecualian, ada blok catch yang menamai tipe pointer yang benar dan memiliki deletepanggilan yang sesuai . Exception Anda tidak boleh ditangkap oleh catch (...)kecuali blok itu melempar kembali pengecualian yang kemudian ditangkap oleh blok penangkap lain yang menangani pengecualian dengan benar.
Secara efektif, ini berarti Anda telah menggunakan fitur penanganan pengecualian yang akan mempermudah penulisan kode yang kuat dan membuatnya sangat sulit untuk menulis kode yang benar dalam semua situasi. Ini mengesampingkan masalah bahwa hampir tidak mungkin bertindak sebagai kode pustaka untuk kode klien yang tidak mengharapkan fitur ini.
throw gcnewakan berguna misalnya. jika Anda ingin kode terkelola menangkap pengecualian Anda. Bisakah seseorang mengoreksi saya tentang itu?