How to use boost::smart_ptr in polymorphism?
问题 Boost smart pointers can be used with polymorphism, but how do you cast the subclass back to the pointer? using namespace boost; // ... shared_ptr<SuperClass> a_ptr(new SubClass); // ... shared_ptr<SubClass> b_ptr = (shared_ptr<SubClass>)a_ptr; // Doesn't compile The last line doesn't compile and gives error C2440: 'type cast' : cannot convert from 'boost::shared_ptr <T> ' to 'boost::shared_ptr <T> ' 回答1: You need to use static_pointer_cast : struct B { virtual ~B() { } }; struct D : B { };