问题
What is the equivalent of a static_cast
with boost::shared_ptr
?
In other words, how do I have to rewrite the following
Base* b = new Derived();
Derived* d = static_cast<Derived*>(b);
when using shared_ptr
?
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = ???
回答1:
Use boost::static_pointer_cast
:
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
回答2:
There are three cast operators for smart pointers: static_pointer_cast
, dynamic_pointer_cast
, and const_pointer_cast
. They are either in namespace boost
(provided by <boost/shared_ptr.hpp>
) or namespace std::tr1
(provided either by Boost or by your compiler's TR1 implementation).
回答3:
As a comment: if Derived does in fact derive from Base, then you should use a dynamic_pointer_cast rather than static casts. The system will have a chance of detecting when/if your cast is not correct.
回答4:
It is worth to mention that the there is difference in the number of casting operators provided by Boost and implementations of TR1.
The TR1 does not define the third operator const_pointer_cast()
来源:https://stackoverflow.com/questions/624854/static-cast-with-boostshared-ptr