문제

a와 동등한 것은 무엇입니까? static_cast ~와 함께 boost::shared_ptr?

즉, 다음을 어떻게 다시 작성해야합니까?

Base* b = new Derived();
Derived* d = static_cast<Derived*>(b);

사용할 때 shared_ptr?

boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = ???
도움이 되었습니까?

해결책

사용 boost::static_pointer_cast:

boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);

다른 팁

스마트 포인터를위한 3 개의 캐스트 오퍼레이터가 있습니다. static_pointer_cast, dynamic_pointer_cast, 그리고 const_pointer_cast. 그들은 네임 스페이스에 있습니다 boost (에 의해 제공 <boost/shared_ptr.hpp>) 또는 네임 스페이스 std::tr1 (부스트 또는 컴파일러의 TR1 구현으로 제공).

의견대로 : 파생이 실제로 기본에서 파생된다면 정적 캐스트 대신 Dynamic_pointer_cast를 사용해야합니다. 시스템은 캐스트가 올바르지 않은시기를 감지 할 가능성이 있습니다.

TR1의 부스트 및 구현에 의해 제공되는 캐스팅 연산자의 수에는 차이가 있다고 언급 할 가치가 있습니다.

TR1은 세 번째 연산자 const_pointer_cast ()를 정의하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top