Rumah >pembangunan bahagian belakang >C++ >Apakah Perbezaan Antara `lempar` dan `buang Pengecualian baru()` dalam Pengendalian Pengecualian?
Pemahaman mendalam tentang perbezaan antara throw
dan throw new Exception()
pengendalian pengecualian, terdapat perbezaan yang ketara dalam kesan penggunaan throw
dan throw new Exception()
. Mari selami gelagat masing-masing:
throw
: Simpan maklumat pengecualian asal
throw
melemparkan semula pengecualian yang sedang aktif. Apabila digunakan dalam blok catch
, ia mengekalkan jenis pengecualian asal, mesej dan surih tindanan. Ini membenarkan pengecualian untuk meneruskan penyebaran tanpa diubah suai.
<code>try { ... } catch { throw }</code>
Dalam senario ini, jika pengecualian berlaku dalam blok try
, blok catch
akan melemparkan semula pengecualian yang sama dengan maklumat asalnya utuh.
throw new Exception()
: Tetapkan semula surih tindanan
Sebaliknya, throw new Exception(message)
membuat contoh pengecualian baharu dengan mesej yang ditentukan. Tindakan ini menetapkan semula jejak tindanan, mengalih keluar semua maklumat pengesanan yang berlaku sebelum blok catch
.
<code>try{ ... } catch(Exception e) {throw new Exception(e.message) }</code>
Dalam contoh ini, jika pengecualian berlaku dalam blok try
, blok catch
akan mencipta pengecualian baharu dengan mesej pengecualian asal, tetapi surih tindanan bermula daripada blok catch
itu sendiri.
Elakkan menggunakan throw ex
Adalah sangat disyorkan untuk tidak menggunakan catch
dalam blok throw ex
. Melakukannya menyebabkan pengecualian asal disebarkan, tetapi surih tindanan ditetapkan semula. Ini menjadikan penyahpepijatan sumber pengecualian sangat sukar.
Buat pengecualian tersuai
Dalam sesetengah kes, semua pengecualian mungkin perlu dibungkus dalam objek pengecualian tersuai untuk memberikan maklumat tambahan. Untuk melakukan ini, tentukan kelas pengecualian baharu yang diwarisi daripada Exception
, termasuk kesemua empat pembina pengecualian. Secara pilihan, anda boleh menambah pembina tambahan yang menerima pengecualian asal dan maklumat tambahan. Apabila melontar pengecualian tersuai, pastikan anda lulus pengecualian asal sebagai parameter pengecualian dalaman untuk mengekalkan surih tindanan dan sifat lain.
Atas ialah kandungan terperinci Apakah Perbezaan Antara `lempar` dan `buang Pengecualian baru()` dalam Pengendalian Pengecualian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!