Teknik Pengendalian Pengecualian dalam C : Menangkap dengan Penunjuk
Dalam C , pengecualian boleh ditangkap dalam tiga cara berbeza: mengikut nilai, rujukan, atau penunjuk. Setiap kaedah mempunyai kelebihan dan kelemahan tersendiri.
Tangkap mengikut Nilai
Semantik salin digunakan apabila menangkap pengecualian mengikut nilai. Salinan baharu objek pengecualian dibuat, yang melibatkan penduaan data objek. Ini boleh menjadi tidak cekap untuk objek besar.
Tangkap melalui Rujukan
Apabila menangkap pengecualian melalui rujukan, objek pengecualian asal dirujuk. Tiada penyalinan berlaku, menghasilkan kecekapan yang lebih baik berbanding dengan menangkap mengikut nilai. Walau bagaimanapun, penjagaan mesti diambil untuk mengelakkan rujukan berjuntai.
Tangkap dengan Penunjuk
Menangkap pengecualian melalui penuding adalah serupa dengan menangkap melalui rujukan, kecuali penunjuk ke objek pengecualian ditangkap dan bukannya rujukan langsung. Kaedah ini memberikan kawalan terbanyak ke atas pengendalian pengecualian, kerana ia membolehkan anda mengosongkan memori yang diperuntukkan untuk objek pengecualian apabila ia tidak lagi diperlukan.
Adalah penting untuk ambil perhatian bahawa melemparkan penuding ke objek pengecualian secara amnya berkecil hati. Sebaliknya, pertimbangkan untuk menggunakan penunjuk pintar (cth., shared_ptr) untuk mengurus memori objek pengecualian.
Syor
Syor C standard ialah melempar mengikut nilai dan tangkapan melalui rujukan. Kaedah ini cekap dan melindungi daripada rujukan berjuntai.
Nota Tambahan
Dalam kod contoh anda:
class A {} void f() { A *p = new A(); throw p; }
Melempar penunjuk ke objek tidak disyorkan kerana ia memerlukan pengurusan memori manual di tapak tangkapan. Jika anda perlu membaling objek, pertimbangkan untuk menggunakan penunjuk pintar, seperti shared_ptr.
Atas ialah kandungan terperinci Bagaimana Memilih Teknik Pengendalian Pengecualian Terbaik dalam C : Mengikut Nilai, Rujukan atau Penunjuk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!