用指针和独特的指针进行emplace_back

emplace_back with pointer and unique pointers

本文关键字:指针 emplace back      更新时间:2023-10-16

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;
}

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

正确的术语是隐式类型转换。但是,是的,这就是在这一行中发生的事情:

m_map.emplace(id, myStruct);

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

explicit unique_ptr( pointer p ) noexcept;

这是将指针转换为unique_ptr的所谓的