c를 내가이 줄을 아무런 설명도, 함수 본문 또는 클래스 정의가 없었다새로운 2 PARAM은, 예를 들어 ++에서
Thing *pThing = new (getHeap(), getConstraint()) Thing(initval());
을 보았다. 두 번째 매개 변수는 무엇을 의미합니까?
c를 내가이 줄을 아무런 설명도, 함수 본문 또는 클래스 정의가 없었다새로운 2 PARAM은, 예를 들어 ++에서
Thing *pThing = new (getHeap(), getConstraint()) Thing(initval());
을 보았다. 두 번째 매개 변수는 무엇을 의미합니까?
'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에는 더 많은 정보가 있습니다.
아무 것도 추가하거나 제거 할 수 없다. – Arafangion
이 답변은 순금입니다 –
정확하게 입력 했습니까? 새로운 결과를 받아들이는 변수가없는 것 같습니다. –
나는 그것이 "Thing * pThing = new (getHeap(), getConstraint()) Thing (initval());"이라고 생각되었다. " C++에서 # 14에서 나온 것입니다 – CTT
CTT, 고맙습니다. 이제는 의미가 있습니다. –