Question

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 = ???
Was it helpful?

Solution

Use boost::static_pointer_cast:

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

OTHER TIPS

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).

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.

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()

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top