new 연산자는 메모리를 0으로 초기화합니다
C에서는 new 연산자가 동적 메모리 할당에 일반적으로 사용됩니다. 지정된 크기의 메모리 블록을 할당하고 할당된 메모리에 대한 포인터를 반환합니다. 그러나 new가 할당된 메모리를 0으로 초기화하지 않는다는 일반적인 오해가 있습니다. 이 기사에서는 new가 메모리를 초기화하는 방법을 설명하고 명백한 불일치를 해결합니다.
기본 및 0 초기화
new를 사용하여 기본 유형(예: int)의 객체를 생성하는 경우 , unsigned int), 두 가지 변형이 있습니다:
배열에도 동일하게 적용됩니다:
제로 초기화 설명
new는 일반적으로 불확실한 값으로 프리미티브를 초기화하지만 빈 괄호 구문(new)으로 제로 초기화를 사용할 때 예외가 발생합니다. 유형();). 그러면 메모리가 0으로 초기화됩니다. C 11 표준은 다음 동작을 지원합니다.
[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.
Placement New
Placement new를 사용하면 특정 위치에 메모리를 할당할 수 있습니다. 0 초기화로 이 기술을 활용하면 메모리가 실제로 0으로 설정되어 있음이 분명해집니다.
//... (memory allocation and initialization code) wsa[0] = 1; // Modify the memory location wsa[1] = 2; // Modify the memory location // ... (more modifications) //...
메모리에 원래 값(1, 2, ...)이 포함된 경우 0 초기화는 실패한. 그러나 출력에서는 할당된 메모리가 0으로 설정되었음을 확인합니다.
따라서 new는 일반적으로 기본 메모리를 0으로 초기화하지 않지만 0 초기화(new type();)를 사용하면 메모리를 0으로 초기화합니다. 이는 직접 메모리 할당과 신규 배치 모두에 해당됩니다.
위 내용은 C의 'new'가 메모리를 0으로 초기화합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!