업데이트 : 이 예제의 shared_ptr은 Boost의 것과 비슷하지만 shared_polymorphic_downcast (또는 해당 문제에 대해 dynamic_pointer_cast 또는 static_pointer_cast)를 지원하지 않습니다!
참조 횟수를 잃지 않고 파생 클래스에 대한 공유 포인터를 초기화하려고합니다.
struct Base { };
struct Derived : public Base { };
shared_ptr<Base> base(new Base());
shared_ptr<Derived> derived;
// error: invalid conversion from 'Base* const' to 'Derived*'
derived = base;
여태까지는 그런대로 잘됐다. C ++가 Base *를 Derived *로 암시 적으로 변환 할 것이라고는 예상하지 못했습니다. 그러나 코드로 표현 된 기능 (즉, 기본 포인터를 다운 캐스팅하는 동안 참조 횟수 유지)을 원합니다. 내 첫 번째 생각은 Derived 로의 암시 적 변환이 발생할 수 있도록 Base에 캐스트 연산자를 제공하는 것이 었습니다 (행동 자의 경우 : 다운 캐스트가 유효한지 확인합니다. 걱정하지 마십시오).
struct Base {
operator Derived* ();
}
// ...
Base::operator Derived* () {
return down_cast<Derived*>(this);
}
음, 도움이되지 않았습니다. 컴파일러가 내 typecast 연산자를 완전히 무시한 것 같습니다. shared_ptr 할당을 작동시키는 방법에 대한 아이디어가 있습니까? 추가 점수 : 어떤 유형 Base* const
입니까? const Base*
이해 합니다만 Base* const
? 무엇 않습니다 const
이 경우 다음을 참조?