[英]Cannot insert std::unique_ptr with custom deleter with std::move
我将带有自定义删除器的std::unique_ptr
用作std::map
的值,如下所示:
#include <iostream>
#include <memory>
#include <map>
void deleter(int* p){
std::cout<<"Deleting..."<<std::endl;
delete p;
}
int main()
{
std::map<char, std::unique_ptr<int, void(*)(int*)>> a;
std::unique_ptr<int, void(*)(int*)> p{new int{3}, deleter};
a['k'] = std::move(p);
}
插入值时,我使用std::move
,但不会编译。
我究竟做错了什么?
您会在链接后看到错误。
如果键不存在,则a['k']
将默认构造映射的值类型。 由于您的unique_ptr
使用自定义删除器,因此默认无法构建。 您将必须使用map::emplace()
或map::insert()
将unique_ptr
添加到地图中。 如果要在此之前知道元素是否存在,可以使用map::count()
或map::find()
。
如果可以使用C ++ 17,则可以改用map::try_emplace()
,它将仅在键不存在时添加对象,从而节省了查找时间。
该错误在于分配前地图条目的默认构造!
对不起,没有时间来解决这个问题,但是通常我会使用插入代替吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.