我将带有自定义删除器的console.log(apiKey)
用作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);
}
,但不会编译。
我在做什么错了?
您会在链接后看到错误。
答案 0 :(得分:5)
a['k']
将默认构造映射的值类型。由于您的unique_ptr
使用自定义删除器,因此默认无法构建。您将必须使用map::emplace()
或map::insert()
将unique_ptr
添加到地图。如果要在此之前知道元素是否存在,可以使用map::count()
或map::find()
。
如果可以使用C ++ 17,则可以改用map::try_emplace()
,它只会在键不存在时添加对象,从而节省了查找时间。
答案 1 :(得分:0)
该错误在于分配前地图条目的默认构造!
很抱歉没有时间弄清楚答案,但是通常我会使用插入代替吗?