std::unique_ptr对象无法插入std::unordered_map的解决办法

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

假设有一个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=Timer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值