emplace_back 有指针和唯一指针

emplace_back with pointer and unique pointers

相对于someFunctionOnesomeFunctionTwo

将每一个都放置到地图中时,最终结果是否仍然相同?

指针是否升级为智能指针?

struct MyStruct {
        int x = 0;
    };

std::unordered_map<int, std::unique_ptr<MyStruct>> m_map;

void someFunctionOne(int id, std::unique_ptr<MyStruct>& myStruct){
    m_map.emplace(id, std::move(myStruct));
}

void someFunctionTwo(int id, MyStruct * myStruct){
    m_map.emplace(id, myStruct);
}

int main()
{
    someFunctionOne(452, std::make_unique<MyStruct>());
    someFunctionTwo(10, new MyStruct);

    m_map.clear();
    return 0;
}

Does the pointer get upgraded to a smart pointer ?

正确的术语是Implicit type conversion。但是,是的,这就是这一行中会发生的事情:

m_map.emplace(id, myStruct);

这是因为 unique_pointer 有一个具有签名的单值构造函数:

explicit unique_ptr( pointer p ) noexcept;

这就是将指针转换为 unique_ptr 的方法。