是否允许将unique_ptr分配给shared_ptr?

is assigning unique_ptr to shared_ptr allowed?

本文关键字:ptr shared 分配 unique 是否      更新时间:2023-10-16
std::map<std::string, std::shared_ptr<SomeClass>> map_string_to_object_pointer;

map_string_to_object_pointer["abcd"] = std::make_unique<SomeClass>();

问题是关于为shared_ptr分配unique_ptr。这是一个现有的代码,因此只是试图了解它是一个糟糕的编程还是分配给唯一的shared_ptr隐式地将unique_ptr转换为共享?因此,没有编译器警告。

是的,这会调用相应的赋值运算符:

template< class Y, class Deleter > 
shared_ptr& operator=( std::unique_ptr<Y,Deleter>&& r );

构造函数和赋值都存在这样的重载(即使0_o接受std::auto_ptr

实际上只有一种糟糕的编程实践:在没有真正知道自己在做什么的情况下做某事。其他一切都是完全可以接受的。