有没有办法在不使用std :: dynamic_pointer_cast完成新的shared_ptr和移动的情况下对std :: shared_ptr进行强制转换?
还有一个场景我不打算拥有shared_ptr,在这种情况下我想创建对现有shared_ptr的引用
e.g。
const std::shared_ptr<derived>& d = std::dynamic_pointer_cast<derived>(b); //
where b is std::shared_ptr<base>
这里我得到b的引用,但仍然支付临时shared_ptr。
除了在这里使用原始指针之外还有更好的方法吗?
答案 0 :(得分:0)
您可以从shared_ptr
获取指针或引用并向下转发:
std::shared_ptr<Base> b(new Derived);
auto& d1 = dynamic_cast<Derived&>(*b);
auto* d2 = dynamic_cast<Derived*>(&*b);
auto* d3 = dynamic_cast<Derived*>(b.get());
请注意,销毁原始shared_ptr
可能会使原始指针和引用无效。