假设有一个Timer类,用于在程序中创建(多个)定时器。
我们使用std::unique_ptr命名了新类型TimerPtr,然后创建了对象实例:
using TimerPtr = std::unique_ptr<Timer>;
TimerPtr timer = createTimer(callback);
如果要使用一个std::unordered_map来存储我们所创建的多个定时器,代码如下:
std::unordered_map<int32_t, frm_event::TimerPtr> timers_;
我们通过哈希插入函数来存储定时器ID(timerId)与定时器指针之间的关系:
timers_.insert(std::make_pair(timerid, timer));
这段代码在编译的时候会遇到错误:
error C2440: “<function-style-cast>”: 无法从“initializer list”转换为“_Mypair”
message : 查看对正在编译的函数 模板 实例化“std::pair<_Kty,_Ty> std::make_pair<int32_t&,TimerPtr&>(_Ty1,_Ty2) noexcept(false)”的引用
1> with
1> [
1> _Kty=int32_t,
1> _Ty=TimerP

在尝试将std::unique_ptr对象插入std::unordered_map时,由于unique_ptr不支持拷贝构造,导致编译错误。解决方法是利用unique_ptr的移动语义,通过std::move来插入。文章介绍了unique_ptr和shared_ptr在容器中的使用区别,以及Grass项目——一个基于互联网带宽资源交易的去中心化协议,用户可以通过参与Grass赚取积分并转化为网络所有权。

2128

被折叠的 条评论
为什么被折叠?



