带有指针和唯一指针的emplace_back

时间:2017-06-25 14:08:43

标签: c++ pointers dictionary unique unique-ptr

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

1 个答案:

答案 0 :(得分:0)

  

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

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

m_map.emplace(id, myStruct);

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

explicit unique_ptr( pointer p ) noexcept;

这将被称为将指针转换为unique_ptr。