相关疑难解决方法(0)

将shared_ptr <Base>向下转换为shared_ptr <Derived>?

更新:此示例中的shared_ptr与Boost中的一样,但它不支持shared_polymorphic_downcast(或者dynamic_pointer_cast或static_pointer_cast)!

我正在尝试初始化一个派生类的共享指针,而不会丢失引用计数:

struct Base { };
struct Derived : public Base { };
shared_ptr<Base> base(new Base());
shared_ptr<Derived> derived;

// error: invalid conversion from 'Base* const' to 'Derived*'
derived = base;  
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.我没想到C++会隐式地将Base*转换为Derived*.但是,我确实需要代码表示的功能(即,在向下转换基指针时保持引用计数).我的第一个想法是在Base中提供一个强制转换运算符,以便可以进行对Derived的隐式转换(对于pedants:我会检查向下转换是否有效,不要担心):

struct Base {
  operator Derived* ();
}
// ...
Base::operator Derived* () {
  return down_cast<Derived*>(this);
}
Run Code Online (Sandbox Code Playgroud)

好吧,它没有帮助.似乎编译器完全忽略了我的类型转换操作符.任何想法如何使shared_ptr分配工作?加分:什么类型Base* constconst Base*我理解,但是Base* constconst在这种情况下指的是什么?

c++ gcc boost

90
推荐指数
3
解决办法
6万
查看次数

标签 统计

boost ×1

c++ ×1

gcc ×1