static_cast with boost :: shared_ptr?

Fra*_*ank 72 c++ boost shared-ptr static-cast

什么是一个相当于static_castboost::shared_ptr

换句话说,我该如何重写以下内容

Base* b = new Derived();
Derived* d = static_cast<Derived*>(b);
Run Code Online (Sandbox Code Playgroud)

什么时候用shared_ptr

boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = ???
Run Code Online (Sandbox Code Playgroud)

Fra*_*ank 105

用途boost::static_pointer_cast:

boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
Run Code Online (Sandbox Code Playgroud)

  • 我只是觉得如果你使用它并且Derived类没有被完全包含(即它只是向前声明)你会得到非常无益的"无效类型转换:"Base*"to"Derived*" ".在我弄清楚它之前,我花了很长时间盯着屏幕:) (5认同)
  • `boost :: static_pointer_cast <Derived>(b)`也可以用作`Base`是隐含的. (4认同)

Mic*_*fik 22

有三种类型转换操作符的智能指针:static_pointer_cast,dynamic_pointer_cast,和const_pointer_cast.它们位于命名空间boost(由提供者<boost/shared_ptr.hpp>)或命名空间std::tr1(由Boost或编译器的TR1实现提供).