Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah Pengkompil C Anda Mengendalikan Pengecualian Operator `baru` dengan Betul?

Adakah Pengkompil C Anda Mengendalikan Pengecualian Operator `baru` dengan Betul?

Linda Hamilton
Linda Hamiltonasal
2024-11-19 05:33:02776semak imbas

Does Your C   Compiler Correctly Handle `new` Operator Exceptions?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn