Static_cast 与升级: : share_ptr?

static_castboost::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 = ???
43612 次浏览

使用 boost::static_pointer_cast:

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

智能指针有三个强制转换运算符: static_pointer_castdynamic_pointer_castconst_pointer_cast。它们在名称空间 boost(由 <boost/shared_ptr.hpp>提供)或名称空间 std::tr1(由 Boost 或编译器的 TR1实现提供)中。

作为注释: 如果 Derived 实际上是从 Base 派生的,那么应该使用 Dynamic _ point _ cast 而不是静态强制转换。系统将有机会检测何时/如果你的施法不正确。

值得一提的是,Boost 提供的强制转换操作符的数量与 TR1的实现之间存在差异。

TR1没有定义第三个运算符 const _ point _ cast ()