C++ 是否可以在不复制的情况下向下播放共享\u ptr? #包括 结构a{}; 结构b:公共a{}; std::shared_ptr get() { std::共享ptr温度(新b); return std::static_pointer_cast(temp);//原子引用计数inc/dec }

C++ 是否可以在不复制的情况下向下播放共享\u ptr? #包括 结构a{}; 结构b:公共a{}; std::shared_ptr get() { std::共享ptr温度(新b); return std::static_pointer_cast(temp);//原子引用计数inc/dec },c++,c++11,shared-ptr,downcast,C++,C++11,Shared Ptr,Downcast,据我所知,降级共享\u ptr的唯一方法是静态\u指针\u转换。但是,它只接受常量引用并创建参数的降级副本。如果可能的话,我希望避免复制,因为复制构造和销毁共享的_ptr意味着原子递增/递减操作 有一些move构造函数采用其他shared_ptr实例,但它们不支持downcast 是否可以以符合标准的方式避免复制?不,无法避免复制 这是因为std::shared_ptr和std::shared_ptr之间没有继承关系,因此不能在它们之间任意转换 如果您想(通过移动)获得传递给构造函数的指针的所有

据我所知,降级共享\u ptr的唯一方法是静态\u指针\u转换。但是,它只接受常量引用并创建参数的降级副本。如果可能的话,我希望避免复制,因为复制构造和销毁共享的_ptr意味着原子递增/递减操作

有一些move构造函数采用其他shared_ptr实例,但它们不支持downcast


是否可以以符合标准的方式避免复制?

不,无法避免复制

这是因为
std::shared_ptr
std::shared_ptr
之间没有继承关系,因此不能在它们之间任意转换


如果您想(通过移动)获得传递给构造函数的指针的所有权,为什么不使用
unique\u ptr
?如果您没有所有权,请不要将其作为智能指针传递。

它是多个线程之间的共享实体,因此我无法轻松将其转换为唯一的\u ptr。
#include <memory>

struct a {};
struct b : public a {};

std::shared_ptr<b> get()
{
    std::shared_ptr<a> temp(new b);
    return std::static_pointer_cast<b>(temp); // atomic ref-count inc/dec
}