첫 번째 두 개는 전역 새 연산자의 서명입니다. 가치가있는 것에 대해서는 operator new
이 x = new T;
과 같은 새 표현식을위한 공간을 할당하는 데 사용되고 operator new[]
은 x = new T[count];
과 같은 새 표현식을위한 공간을 할당하는 데 사용됩니다. 가치가있는 "작은"것은 아주 간단한 이유입니다. new T[count]
을 사용하면 안되며, 작동 방식은 거의 전적으로 역사적인 호기심입니다.
원하는 경우 힙 할당을 제공하기 위해 ::operator new
및/또는 ::operator new[]
을 오버로드 할 수 있습니다. 에는 두 가지 사이에 차이가없는이 있습니다. 기본 요구 사항은 모두 요청한 메모리 양을 할당하고 포인터를 반환합니다.
까지 operator new
으로 전달되는 크기는 항상 개체의 크기와 사용자가 지정한 개수의 배열에 따라 컴파일러에서 계산됩니다. 따라서 새 식에서 지정하는 매개 변수는 operator new
에 전달되는 두 번째 매개 변수로 바뀝니다.
내가 위에 아주 충분히 명확하게되지 못한 점을 강조하려면 사용하는
operator new
(및
operator new[]
)을하지만, 새로운 표현 (당신이
x = new T;
같은 것을 말할 때 당신은 당신의 코드에서 무엇을) 분리.
operator new
과
operator new[]
은 마치
malloc
과 거의 같습니다. 그들은 "원시"메모리를 할당합니다. 새 표현식 은 원시 메모리를 할당하기 위해 이들 중 하나를 사용하고 해당 메모리에 객체 (또는
new T[count];
의 경우 둘 이상)를 할당하기 위해 생성자를 호출합니다. 이 두 가지는 분명히 관련되어 있지만 똑같이 분명히 동일하지는 않습니다.
다른 작은 점 : operator new
(또는 operator new[]
)을 클래스 멤버로 가질 수도 있습니다. 이렇게하면 전역 힙을 사용하는 다른 메모리와 다른 방식으로 클래스를 할당 할 수 있습니다. 많은 양으로 할당하려고하는 작은 객체들입니다. 이들을 위해서, 전역 힙은 피해야 할 오버 헤드가 많을 수 있습니다.
마지막으로 /를 원시 메모리에 할당하려면 또한 operator new
을 void *a = ::operator new(1234);
에서처럼 직접 호출합니다. 자신이 일종의 컬렉션 클래스를 구현하기로 결정한 경우 (순환 버퍼가 필요한 경우)
Stroustrup의 서적은 참고 문헌이 아닙니다. C++ 표준이 있습니다. 무료 [here] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf) 표준에 매우 근접한 것을 찾을 수 있습니다. – ildjarn
'new []'는'new'와 별개의 연산자입니다 ... –
나는 관련된 '개념적 주제'에 대한 참조를 의미했습니다. 나는이 책을 읽고 그냥 과부하를 끝내고 나는 그 주제와 관련된 모든 것을 다했다고 생각했다. 그러나이 정의는 저를 현혹시킵니다. – PnotNP