Rumah >pembangunan bahagian belakang >C++ >Adakah `new unsigned int` Memulakan Memori kepada Sifar dalam C ?
Dalam coretan kod berikut:
#include <iostream> int main(){ unsigned int* wsk2 = new unsigned int(5); std::cout <p>Hasil yang dijangkakan ialah memori tidak dimulakan kepada sifar, tetapi outputnya ialah:</p> <pre class="brush:php;toolbar:false">wsk2: 0x928e008 5 wsk2: 0x928e008 0
Nampaknya pengendali baharu sedang memulakan memori kepada sifar, tetapi sebenarnya tidak.
Cara ia berfungsi:
Terdapat dua versi pengendali baharu:
wsk = new unsigned int; // default initialized (ie nothing happens) wsk = new unsigned int(); // zero initialized (ie set to 0)
Pengamatan lalai berfungsi tidak memulakan memori, manakala permulaan sifar menetapkan memori kepada sifar.
Ia juga berfungsi untuk tatasusunan:
wsa = new unsigned int[5]; // default initialized (ie nothing happens) wsa = new unsigned int[5](); // zero initialized (ie all elements set to 0)
Untuk mengesahkan bahawa memori sebenarnya disifarkan, kita boleh menggunakan peletakan baharu dengan sekeping ingatan yang diketahui:
#include <new> #include <iostream> int main() { unsigned int wsa[5] = {1,2,3,4,5}; // Use placement new (to use a know piece of memory). // In the way described above. // unsigned int* wsp = new (wsa) unsigned int[5](); std::cout <p>Output kod ini ialah:</p> <pre class="brush:php;toolbar:false">0 0 0 0 0
Yang mengesahkan bahawa memori sememangnya disifarkan oleh versi permulaan sifar operator baharu.
Atas ialah kandungan terperinci Adakah `new unsigned int` Memulakan Memori kepada Sifar dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!