Rumah >pembangunan bahagian belakang >C++ >Apakah Kelakuan Operator `baru` dalam Penyusun C Berbeza, Terutama Berkenaan Kegagalan Peruntukan Memori?

Apakah Kelakuan Operator `baru` dalam Penyusun C Berbeza, Terutama Berkenaan Kegagalan Peruntukan Memori?

Susan Sarandon
Susan Sarandonasal
2024-11-17 20:14:02600semak imbas

What is the Behavior of the `new` Operator in Different C   Compilers, Especially Regarding Memory Allocation Failure?

Adakah Baharu Akan Kembali NULL?

Dalam C , pengendali baharu bertanggungjawab untuk memperuntukkan memori untuk objek baharu. Menurut C Standard, jika new gagal memperuntukkan memori, ia dijangka akan membuang pengecualian std::bad_alloc. Walau bagaimanapun, terdapat khabar angin bahawa penyusun tertentu, seperti Visual C 6 (VC6), menyimpang daripada tingkah laku ini.

Ketidakpatuhan VC6

Khabar angin itu adalah benar . VC6, secara lalai, tidak mematuhi Piawaian C dalam hal ini. Apabila baharu gagal memperuntukkan memori, ia mengembalikan 0 (atau NULL) dan bukannya membuang pengecualian.

Penyelesaian Microsoft

Microsoft mengiktiraf isu ini dan menyediakan penyelesaian yang dicadangkan: menggunakan pengendali baharu tersuai. Pembangun boleh menentukan pelaksanaan operator baru mereka sendiri yang akan membuang pengecualian std::bad_alloc dan bukannya mengembalikan 0.

Penyusun MSVC Kemudian

Dalam versi MSVC berikutnya ( dari 7.0 dan kemudian), tingkah laku baharu menjadi lebih kompleks. Terdapat satu set peraturan yang menentukan sama ada ia akan membuang pengecualian atau mengembalikan 0.

VS2005 and Beyond

Dengan VS2005 (MSVC 8.0), Microsoft akhirnya membersihkan tingkah laku ini. Secara lalai, new kini membuang pengecualian std::bad_alloc melainkan dipautkan secara eksplisit kepada nothrownew.obj.

Pendekatan Alternatif: std::nothrow

Pembangun juga boleh menentukan bahawa mereka mahu baru mengembalikan 0 dan bukannya membuang pengecualian dengan menggunakan parameter std::nothrow. Ini membolehkan gelagat yang konsisten merentas pengkompil, walaupun dengan kod warisan yang ditulis untuk VC6.

Atas ialah kandungan terperinci Apakah Kelakuan Operator `baru` dalam Penyusun C Berbeza, Terutama Berkenaan Kegagalan Peruntukan Memori?. 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