static_cast与boost :: shared_ptr?
什么是与boost::shared_ptr
的static_cast
的等价物?
换句话说,我该如何重写下面的内容
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);
智能指针有三个转换运算符: const_pointer_cast
, dynamic_pointer_cast
和const_pointer_cast
。 它们要么在名称空间boost
(由<boost/shared_ptr.hpp>
)或名称空间为std::tr1
(由Boost或由编译器的TR1实现提供)。
作为一个评论:如果Derived实际上是从Base派生的,那么你应该使用dynamic_pointer_cast而不是静态的casts。 系统将有机会检测何时/如果您的演员不正确。
值得一提的是,由Boost和TR1的实现提供的铸造操作员的数量是不同的。
TR1没有定义第三个运算符const_pointer_cast()