2016-07-04 5 views
0

오늘 포인터의 이상한 초기화를 보았습니다. 다음과 같이 보입니다 :생성시 변수에 포인터를 캐스팅하십시오.

struct A 
{ 
    void* data; 
    int bufLen; 
    ... 
} 

void fun(A* a, int* result) 
{ 
    SomeClass* b = new (a->data) SomeClass(); 
} 

완전히 멋지며 컴파일도 작동하지만 왜 그런지는 알 수 없습니다. 변수 b의 초기화로 어떤 일이 벌어지고 있는지 알고 싶습니다. 캐스트입니까? 새로운 메모리 슬롯에 변수 a->data 사본이 있습니까?

+8

[placement'new'] (https://isocpp.org/wiki/faq/dtors#placement-new)라고합니다. – Biffen

+1

가능한 "[placement new"에 어떤 용도가 있습니까?] (http://stackoverflow.com/questions/222557/what-uses-are-there-for-placement-new) – user463035818

+0

감사합니다. @Biffen. 하나의 질문 : 예를 들어, 다른 스레드에 정보를 전달하기 위해'SomeClass' 변수를 사용할 수 있습니까? 가능한 경우,'fun' 함수로 descrutor를 호출 할 필요가 있습니까? – Astinog

답변

2

이것은 이라는 새로운 배치 코드이며 일반적으로 메모리의 지정된 주소에 개체를 배치하는 데 사용됩니다.

코드에서 SomeClass 유형의 개체는 a->data의 메모리 위치에 배치됩니다.

operator new을 직접 사용하거나 헤더 파일 <new>에 포함 된 표준 라이브러리에 이미 정의 된 것을 사용하면됩니다.

관련 문제