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!