73

static_casta with的等价物是boost::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 = ???
4

4 回答 4

106

使用boost::static_pointer_cast

boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
于 2009-03-09T02:48:16.063 回答
22

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

于 2009-03-09T03:15:40.240 回答
3

作为评论:如果 Derived 实际上是从 Base 派生的,那么您应该使用 dynamic_pointer_cast 而不是静态转换。系统将有机会检测您的演员何时/是否不正确。

于 2009-03-09T06:39:58.567 回答
2

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

TR1 没有定义第三个操作符 const_pointer_cast()

于 2009-11-16T12:23:17.050 回答