static_cast
a 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 = ???
static_cast
a 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 = ???
使用boost::static_pointer_cast
:
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
智能指针有三个强制转换运算符:static_pointer_cast
、dynamic_pointer_cast
和const_pointer_cast
。它们位于命名空间boost
(由 提供<boost/shared_ptr.hpp>
)或命名空间std::tr1
(由 Boost 或编译器的 TR1 实现提供)。
作为评论:如果 Derived 实际上是从 Base 派生的,那么您应该使用 dynamic_pointer_cast 而不是静态转换。系统将有机会检测您的演员何时/是否不正确。
值得一提的是,Boost 提供的强制转换运算符的数量与 TR1 的实现存在差异。
TR1 没有定义第三个操作符 const_pointer_cast()