Rumah > Artikel > pembangunan bahagian belakang > Adakah Pengkompil C Anda Mengendalikan Pengecualian Operator `baru` dengan Betul?
Pengecualian Balingan Baharu: Pemeriksaan Pematuhan Standard C
Piawaian C mewajibkan pengendali baharu membuang pengecualian std::bad_alloc jika peruntukan memori gagal. Walau bagaimanapun, kebimbangan telah dibangkitkan tentang tingkah laku penyusun tertentu, terutamanya VC6, dalam hal ini.
VC6: Melanggar Standard
Mengesahkan khabar angin, VC6 mempamerkan bukan -perilaku patuh. Daripada membuang pengecualian apabila menghadapi kegagalan peruntukan, ia mengembalikan nilai 0 (atau NULL). Sisihan daripada piawai ini menimbulkan cabaran yang berpotensi untuk pembangun kerana ia memerlukan semakan nol yang jelas selepas setiap panggilan baharu, mengakibatkan isu estetika kod.
Penyelesaian Tersuai untuk VC6
Untuk mengurangkan isu ini dalam VC6, Microsoft menyediakan penyelesaian yang melibatkan pengendali baharu tersuai. Penyelesaian ini menambah gelagat lalai dengan pengendalian pengecualian.
Gelagat Pembolehubah dalam Penyusun MSVC Lebih Baharu
Dalam penyusun MSVC dari versi 7.0 dan seterusnya, gelagat baharu adalah lebih kompleks. Penyusun ini mungkin lalai kepada sama ada gelagat melontar atau tidak membaling berdasarkan peraturan tertentu, termasuk pautan ke fail objek nothrownew.obj.
Konsistensi dalam MSVC 8.0 dan Beyond
Dengan keluaran MSVC 8.0 (VS2005), pendekatan yang lebih konsisten telah diterima pakai. Pengkompil ini sentiasa lalai untuk membuang pengecualian baharu melainkan dipautkan secara jelas kepada nothrownew.obj.
Menggunakan std::nothrow untuk Tingkah Laku Tidak Melontar
Pembangun boleh meminta yang baharu secara eksplisit return 0 daripada membuang pengecualian dengan menggunakan parameter std::nothrow. Ini membolehkan keserasian ke belakang dengan kod sedia ada yang ditulis untuk gelagat VC6.
Dengan memahami nuansa ini dan melaksanakan penyelesaian yang sesuai, pembangun boleh memastikan kod C mereka mematuhi standard, tanpa mengira pengkompil yang mereka gunakan.
Atas ialah kandungan terperinci Adakah Pengkompil C Anda Mengendalikan Pengecualian Operator `baru` dengan Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!