다음 코드 조각에서:
#include <iostream> int main(){ unsigned int* wsk2 = new unsigned int(5); std::cout << "wsk2: " << wsk2 << " " << *wsk2 << std::endl; delete wsk2; wsk2 = new unsigned int; std::cout << "wsk2: " << wsk2 << " " << *wsk2 << std::endl; return 0; }
예상되는 결과는 메모리가 0으로 초기화되지 않는다는 것입니다. 0이지만 출력은 다음과 같습니다.
wsk2: 0x928e008 5 wsk2: 0x928e008 0
new 연산자가 초기화 중인 것 같습니다. 메모리는 0으로 설정되지만 실제로는 그렇지 않습니다.
작동 방식:
new 연산자에는 두 가지 버전이 있습니다.
wsk = new unsigned int; // default initialized (ie nothing happens) wsk = new unsigned int(); // zero initialized (ie set to 0)
기본 초기화는 메모리를 초기화하지 않는 반면, 0 초기화는 메모리를 0으로 설정합니다.
다음에도 작동합니다. arrays:
wsa = new unsigned int[5]; // default initialized (ie nothing happens) wsa = new unsigned int[5](); // zero initialized (ie all elements set to 0)
메모리가 실제로 0으로 설정되었는지 확인하려면 알려진 메모리 조각에 새로운 배치를 사용할 수 있습니다.
#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 << wsa[0] << "\n"; // If these are zero then it worked as described. std::cout << wsa[1] << "\n"; // If they contain the numbers 1 - 5 then it failed. std::cout << wsa[2] << "\n"; std::cout << wsa[3] << "\n"; std::cout << wsa[4] << "\n"; }
이 코드의 출력은 다음과 같습니다.
0 0 0 0 0
이것은 new 연산자의 0 초기화 버전에 의해 메모리가 실제로 0으로 초기화되었음을 확인합니다.
위 내용은 `new unsigned int`는 C에서 메모리를 0으로 초기화합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!