emplace_back 有指针和唯一指针
emplace_back with pointer and unique pointers
相对于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;
}
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 的方法。
相对于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;
}
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 的方法。