[英]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.