gpt4 book ai didi

c++ - 带有指针和唯一指针的 emplace_back

转载 作者:太空宇宙 更新时间:2023-11-04 12:59:42 26 4
gpt4 key购买 nike

关于 someFunctionOnesomeFunctionTwo

当每个都放置到 map 中时,最终结果是否仍然相同?

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

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 的调用。

关于c++ - 带有指针和唯一指针的 emplace_back,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44747172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com