#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
}
据我所知,向下转换 shared_ptr 的唯一方法是 static_pointer_cast。但是,它只需要 const 引用并创建参数的向下转换副本。如果可能的话,我想避免复制,因为 shared_ptr 的复制构造和销毁意味着原子递增/递减操作。
有一些移动构造函数采用 shared_ptr 的其他实例,但它们不支持向下转换。
是否可以以符合标准的方式避免复制?