주소를 포함하는 정수 타입을 실제 포인터 유형으로 변환해야합니다. 다음과 같이 나는 reinterpret_cast 사용할 수 있습니다C++ : 정수를 포인터에 캐스트하는 안전한 방법
MyClass *mc1 = reinterpret_cast<MyClass*>(the_integer);
그러나,이 문제의 주소가 실제로 MyClass의 객체를 보유하고 있는지 확인하기 위해 모든 런타임 검사를 수행하지 않습니다. 첫 번째 void (reinterpret_cast 사용)로 변환 한 다음 그 결과에 dynamic_cast를 사용하면 어떤 이점이 있는지 알고 싶습니다. 이와 같이 :
void *p = reinterpret_cast<void*>(the_integer);
MyClass *mc1 = dynamic_cast<MyClass*>(p);
assert(mc1 != NULL);
두 번째 방법을 사용할 때 이점이 있습니까?
두 번째 방법은 유효하지 않습니다. C++, dynamic_cast에 대한 식의 형식이 void *가 아닐 수도 있습니다. –
정수 값이 원래 개체의 포인터 였다고 가정하면 int는 잠재적으로 포인터를 유지할 수 없습니다. 그래서 우리는 무효 *입니다. 유형이 지정되지 않은 경계를 넘어 전송을 위해 포인터를 캐스팅하는 경우 void *로 변환하고 원래 유형으로 되돌려 야합니다. –
그는 'int'를 구체적으로 말하지 않았고 유형은 intptr_t 일 수 있습니다. –