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

wl2776

我有一个C代码,并使用了一些资源。它具有如下功能

ResourcePointer resource_new(void);
void resource_delete(ResourcePointer *res);

这里ResourcePointer

typedef void * ResourcePointer;

我想创建一个typedeffor std::unique_ptr,指定该自定义默认删除器。

以下工作,但是需要重复resource_delete

typedef std::unique_ptr<std::remove_pointer<ResourcePointer>::type, 
                            void(*)(ResourcePointer)> Resource_auto_pointer;

然后在代码中

Resource_auto_pointer resource(resource_new(), resource_delete);
...
Resource_auto_pointer res2 = { resource_new(), resource_delete };

我应该如何更改typedef,以便编译器会resource_delete在需要时自动替换我希望我的代码如下所示

Resource_auto_pointer2 resource (resource_new());
...
Resource_auto_pointer2 res2 = { resource_new() };

编译器应该以某种方式猜测它应该调用resource_deletetype的每个对象Resource_auto_pointer2

我在MS Visual Studio 2013中工作。

更新我已经阅读了其他类似问题的答案。我不明白两件事。

  1. 为什么std :: function不起作用?
  2. 为什么我应该创建新的类型,因为(大概)所有事情都已经说完了?
乔纳森·韦克利(Jonathan Wakely)

定义一个调用正确函数的函数对象:

struct resource_deleter
{
  using pointer = std::remove_pointer<ResourcePointer>::type;
  void operator()(ResourcePointer p) const { resource_delete(p); }
};

using res_ptr = std::unique_ptr<resource_deleter::pointer, resource_deleter>;

现在,您无需将Deleter传递给unique_ptr构造函数,因为Deleter可以是默认构造的,并且可以做正确的事情:

res_ptr p{ resource_new() };

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

混淆使用unique_ptr和自定义删除器

来自分类Dev

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

来自分类Dev

C ++ 11使用unique_ptr和自定义删除器

来自分类Dev

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

来自分类Dev

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

来自分类Dev

Typedef一个带有静态自定义删除器的shared_ptr类型,类似于unique_ptr

来自分类Dev

Typedef一个带有静态自定义删除器的shared_ptr类型,类似于unique_ptr

来自分类Dev

自定义删除程序以通过std :: unique_ptr释放2D数组

来自分类Dev

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

来自分类Dev

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

来自分类Dev

当使用“新”来初始化unique_ptr <FILE *,File :: Close>时,自定义删除器负责释放该内存吗?

来自分类Dev

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

来自分类Dev

unique_ptr 的有状态自定义删除器

来自分类Dev

将std :: make_unique与自定义删除器一起使用

来自分类Dev

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

来自分类Dev

如何使用删除器调用unique_ptr构造函数?

来自分类Dev

std :: shared_ptr:未调用自定义删除器

来自分类Dev

将具有自定义删除器的unique_ptr移到shared_ptr

来自分类Dev

具有自定义删除器的unique_ptr构造函数被删除

来自分类Dev

unique_ptr,自定义删除器和零规则

来自分类Dev

用unique_ptr和自定义删除器包装C代码

来自分类Dev

了解采用自定义删除器的unique_ptr的构造函数

来自分类Dev

初始化传递给unique_ptr自定义删除器的函子

来自分类Dev

如何为由 unique_ptr 管理的数组编写自定义删除器?

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

    混淆使用unique_ptr和自定义删除器

  7. 7

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

  8. 8

    C ++ 11使用unique_ptr和自定义删除器

  9. 9

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

  10. 10

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

  11. 11

    Typedef一个带有静态自定义删除器的shared_ptr类型,类似于unique_ptr

  12. 12

    Typedef一个带有静态自定义删除器的shared_ptr类型,类似于unique_ptr

  13. 13

    自定义删除程序以通过std :: unique_ptr释放2D数组

  14. 14

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

  15. 15

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

  16. 16

    当使用“新”来初始化unique_ptr <FILE *,File :: Close>时,自定义删除器负责释放该内存吗?

  17. 17

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

  18. 18

    unique_ptr 的有状态自定义删除器

  19. 19

    将std :: make_unique与自定义删除器一起使用

  20. 20

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

  21. 21

    如何使用删除器调用unique_ptr构造函数?

  22. 22

    std :: shared_ptr:未调用自定义删除器

  23. 23

    将具有自定义删除器的unique_ptr移到shared_ptr

  24. 24

    具有自定义删除器的unique_ptr构造函数被删除

  25. 25

    unique_ptr,自定义删除器和零规则

  26. 26

    用unique_ptr和自定义删除器包装C代码

  27. 27

    了解采用自定义删除器的unique_ptr的构造函数

  28. 28

    初始化传递给unique_ptr自定义删除器的函子

  29. 29

    如何为由 unique_ptr 管理的数组编写自定义删除器?

热门标签

归档