Rumah >pembangunan bahagian belakang >C++ >Perlukah Pengecualian Dibuang daripada Pembina?
Melontar Pengecualian daripada Pembina: Pertimbangan Reka Bentuk
Dalam bidang pembangunan perisian, perdebatan berterusan mengenai kewajaran melontar pengecualian daripada pembina. Soalan ini telah mencetuskan perbincangan dalam kalangan peminat pengaturcaraan, dan pertanyaan rakan sekerja baru-baru ini mendorong kami untuk mendalami topik tersebut.
Adakah boleh diterima untuk membuang pengecualian daripada pembina dari sudut reka bentuk?
Pertimbangkan senario di mana kelas merangkum mutex POSIX, seperti yang digambarkan dalam contoh di bawah:
class Mutex { public: Mutex() { if (pthread_mutex_init(&mutex_, 0) != 0) { throw MutexInitException(); } } };
Dalam keadaan ini, jika panggilan ke pthread_mutex_init gagal, objek mutex menjadi tidak boleh digunakan. Melemparkan pengecualian memastikan objek tidak dibuat dalam keadaan tidak konsisten, menghalang kemungkinan ralat di jalan.
Amalan Standard vs. Pendekatan Fungsi Ahli
Seseorang mungkin berpendapat bahawa daripada membuang pengecualian, kelas boleh mempunyai fungsi ahli untuk permulaan yang mengembalikan boolean berdasarkan hasil panggilan pthread_mutex_init. Pendekatan ini mempunyai kelebihannya tetapi memperkenalkan isu yang halus. Ia bergantung pada setiap pengguna mengingati untuk menggunakan fungsi permulaan, yang boleh diabaikan dan membawa kepada tingkah laku yang tidak ditentukan. Penyimpangan daripada prinsip RAII (Pemerolehan Sumber Adalah Permulaan) boleh menjejaskan reka bentuk objek yang dimaksudkan.
Kesimpulan
Walaupun kedua-dua pendekatan mempunyai kelebihan masing-masing, membuang pengecualian daripada pembina mempunyai muncul sebagai standard. Dengan gagal awal, ia melindungi daripada mencipta objek yang tidak lengkap atau tidak konsisten, memastikan keadaan objek itu sah sebelum sebarang operasi selanjutnya dilakukan.
Atas ialah kandungan terperinci Perlukah Pengecualian Dibuang daripada Pembina?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!