Pengendalian Pengecualian dalam C : Tangkapan mengikut Nilai atau Rujukan
Apabila mengendalikan pengecualian dalam C , adalah penting untuk mempertimbangkan sama ada untuk menangkap mengikut nilai atau rujukan. Keputusan ini boleh mempunyai implikasi yang ketara pada tingkah laku kod.
Pendekatan Pilihan: Baling Mengikut Nilai, Tangkap dengan Rujukan
Amalan standard untuk pengendalian pengecualian dalam C ialah membuang pengecualian mengikut nilai dan menangkapnya dengan rujukan. Pendekatan ini menangani isu yang berpotensi dengan hierarki warisan.
Contoh:
class CustomException { public: int errorCode; }; class MyException : public CustomException { public: // Overridden error code int errorCode = 404; };
Menangkap mengikut Nilai:
Jika pengecualian ditangkap mengikut nilai, ia terus ditukar kepada jenis yang ditentukan dalam blok tangkapan. Penukaran ini boleh membawa kepada tingkah laku yang tidak diingini, seperti yang ditunjukkan dengan kod berikut:
try { // Throw a MyException object throw MyException(); } catch (CustomException e) { // Catch by value // e is converted to a CustomException object // Error code is now 200 instead of 404 ... }
Menangkap melalui Rujukan:
Sebaliknya, menangkap melalui rujukan memastikan bahawa yang asal objek pengecualian dikendalikan. Ini mengekalkan kod ralat sebenar dan membenarkan pengendalian pengecualian yang diwarisi dengan betul.
try { // Throw a MyException object throw MyException(); } catch (CustomException& e) { // Catch by reference // e references the original MyException object // Error code remains 404 ... }
Kesimpulan:
Walaupun mungkin untuk menangkap pengecualian mengikut nilai dalam C , amalan yang disyorkan ialah membuang mengikut nilai dan menangkap melalui rujukan. Pendekatan ini menghalang potensi isu yang disebabkan oleh warisan dan memastikan pengendalian pengecualian yang tepat.
Atas ialah kandungan terperinci Tangkapan mengikut Nilai atau Rujukan dalam Pengendalian Pengecualian C: Mana Yang Lebih Baik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!