与someFunctionOne
和someFunctionTwo
相关。
当每个被放入地图时,最终结果是否仍然相同?
指针是否升级为智能指针?
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;
}
答案 0 :(得分:0)
指针是否升级为智能指针?
正确的术语是Implicit type conversion。但是,是的,这就是在这一行中会发生的事情:
m_map.emplace(id, myStruct);
这是因为unique_pointer有一个值构造函数,它具有签名:
explicit unique_ptr( pointer p ) noexcept;
这将被称为将指针转换为unique_ptr。