Pengendali baharu Memulakan Memori kepada Sifar
Dalam C , pengendali baharu biasanya digunakan untuk peruntukan memori dinamik. Ia memperuntukkan blok memori saiz yang ditentukan dan mengembalikan penunjuk kepada memori yang diperuntukkan. Walau bagaimanapun, terdapat salah tanggapan umum bahawa baru tidak memulakan memori yang diperuntukkan dengan sifar. Artikel ini menjelaskan cara baharu memulakan ingatan, menangani percanggahan yang ketara.
Permulaan Lalai dan Sifar
Apabila menggunakan baharu untuk mencipta objek jenis primitif (mis., int , unsigned int), terdapat dua variasi:
Perkara yang sama berlaku untuk tatasusunan:
Penjelasan Permulaan Sifar
Walaupun baru secara amnya memulakan primitif dengan nilai tak tentu, pengecualian timbul apabila menggunakan sifar permulaan dengan sintaks kurungan kosong (baharu jenis();). Ini memulakan memori dengan sifar. Piawaian C 11 menyokong tingkah laku ini:
[C++11: 5.3.4/15]: A new-expression that creates an object of type T initializes that object as follows: [...] If the new-initializer is interpreted according to the initialization rules of 8.5 for direct-initialization.
Peletakan Baharu
Peletakan baharu membenarkan memperuntukkan memori di lokasi tertentu. Menggunakan teknik ini dengan pemulaan sifar, ternyata bahawa ingatan sememangnya ditetapkan kepada sifar:
//... (memory allocation and initialization code) wsa[0] = 1; // Modify the memory location wsa[1] = 2; // Modify the memory location // ... (more modifications) //...
Jika ingatan mengandungi nilai asal (1, 2, ...), maka permulaan sifar akan mempunyai gagal. Walau bagaimanapun, output mengesahkan bahawa memori yang diperuntukkan telah ditetapkan kepada sifar.
Oleh itu, walaupun yang baru biasanya tidak memulakan memori primitif dengan sifar, menggunakan sifar permulaan (jenis baru();) memulakan memori kepada sifar. Ini berlaku untuk kedua-dua peruntukan memori langsung dan peletakan baharu.
Atas ialah kandungan terperinci Adakah `baru` dalam C Memulakan Memori kepada Sifar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!