std :: unique_ptr使用带有很少参数的自定义删除器

普斯托瓦洛夫·德米特里

我想知道是否可以为std :: unique_ptr指定自定义删除器,并且使用多个参数(标准删除器签名)。我知道std :: shared_ptr与std :: bind存在变通办法,这使之成为可能,但std :: unique_ptr存在一些技巧吗?

对我来说,这似乎不是因为根据http://en.cppreference.com/w/cpp/memory/unique_ptr

类型要求-删除程序必须是FunctionObject或对FunctionObject的左值引用或对函数的左值引用,并且可以使用类型为unique_ptr :: pointer的参数进行调用

名称
void my_free(int* p, int x, int y){
  std:: cout << x << " " << y << "\n";
}
int main()
{
    auto my_deleter = std::bind(my_free, std::placeholders::_1, 1, 2) ;
    auto my_lambda = [](int* t) { my_free(t, 3, 4); };
    std::unique_ptr<int, decltype(my_deleter)> ptr(new int, my_deleter);
    std::unique_ptr<int, decltype(my_lambda)> ptr2(new int, my_lambda);
    return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法使用带有std :: move的自定义删除器插入std :: unique_ptr

使用std :: function对象将自定义删除器传递给std :: unique_ptr

带有lambda自定义删除程序的std :: unique_ptr无法编译

使用typedef为std :: unique_ptr指定自定义默认删除器

std :: unique_ptr <T []>和自定义分配器删除器

未调用std :: unique_ptr中的自定义删除器

std :: unique_ptr,自定义删除器和类型更改

如何在C ++ 11中返回包含自定义删除器的std :: unique_ptr?

我可以使用自定义删除器简洁地声明std :: unique_ptr吗?

如何将自定义删除器与std :: unique_ptr成员一起使用?

使用内存池中的自定义删除器将 std::unique_ptr 返回到抽象类型

如何使用带有 std::make_unique 的 WinAPI 使用自定义删除器?

如何安全地重载std :: unique_ptr的自定义删除程序?

C ++ 11:使用自定义Lambda Deleter返回std :: unique_ptr

std :: unique_ptr与自定义自由操作结合使用

无法将带有NULL删除器的std :: unique_ptr移动到std :: shared_ptr?

使用带有分配器的std :: unique_ptr

如何制作将函数包装在noexcept可检测的可调用对象中的类模板,以用作std :: unique_ptr自定义删除器?

std :: unique_ptr的自定义删除程序是否是手动调用析构函数的有效位置?

可以将std :: unique_ptr子类化以透明地应用自定义删除程序吗?

使用带有unique_ptr的自定义删除器

使用带有自定义构造函数的std :: set自定义比较器

具有std :: function的std :: shared_ptr作为自定义删除器和分配器

在派生类上使用 std::make_unique 和自定义删除器?

参数std :: unique_ptr <T> &&的std :: move或std :: forward

使用std :: unique_ptr <T>&代替std :: unique_ptr <T>有什么优势吗?

unique_ptr 的有状态自定义删除器

带有std :: unique_ptr的clang错误

铛,返回带有类型转换的std :: unique_ptr