2009-02-25 2 views
5

c를 내가이 줄을 아무런 설명도, 함수 본문 또는 클래스 정의가 없었다새로운 2 PARAM은, 예를 들어 ++에서

Thing *pThing = new (getHeap(), getConstraint()) Thing(initval()); 

을 보았다. 두 번째 매개 변수는 무엇을 의미합니까?

+0

정확하게 입력 했습니까? 새로운 결과를 받아들이는 변수가없는 것 같습니다. –

+0

나는 그것이 "Thing * pThing = new (getHeap(), getConstraint()) Thing (initval());"이라고 생각되었다. " C++에서 # 14에서 나온 것입니다 – CTT

+0

CTT, 고맙습니다. 이제는 의미가 있습니다. –

답변

19

'placement new'구문의 예입니다. 추가 매개 변수를 사용자 지정 메모리 할당 기능에 전달하기위한 것입니다. 이 반면

:

Obj* pObj = new Obj; 

는 입력 size_t 단일 파라미터 sizeof(Obj)의 값 operator new를 호출하여 새로운 메모리를 할당하고 리턴 메모리 위치에서 새로운의 Obj 인스턴스 구성에 대응

Obj* pObj = new (param1, param2) Obj; 

sizeof(Obj) 다음에 param1 및의 세 매개 변수를 사용하여 operator new을 호출하는 것에 해당합니다.및 사용자 지정 operator new의 반환 값이 가리키는 메모리에서 Obj 인스턴스를 생성합니다.

사용자 지정 operator new은 전역 적으로 또는 암시 적으로 정적 클래스 멤버로 정의 할 수 있으며이 경우 해당 유형 또는 파생 된 유형의 클래스 인스턴스 만 할당하는 것으로 간주됩니다.

this FAQ에는 더 많은 정보가 있습니다.

+0

아무 것도 추가하거나 제거 할 수 없다. – Arafangion

+0

이 답변은 순금입니다 –