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

j00hi

我有一个函数,它使用自定义删除器创建一个unique_ptr并返回它:

auto give_unique_ptr() {
    auto deleter = [](int* pi) {
        delete pi;
    };
    int* i = new int{1234};
    return std::unique_ptr<int, decltype(deleter)>(i, deleter);
}

在该函数的客户端代码中,我想将其移动unique_ptr到中shared_ptr,但是由于我不知道该函数外的自定义删除程序的decltype,因此我不知道该怎么做。

我猜应该看起来像这样:

auto uniquePtr = give_unique_ptr();
auto sharedPtr = std::shared_ptr<..??..>(std::move(uniquePtr));

我必须写什么而不是.. ?? ..才能获得正确的类型?

如果可能的话,当其使用计数达到零时,其shared_ptr行为是否良好并调用在give_unique_ptr()函数内部创建的自定义删除程序

纳瓦兹

如果您知道(或想显式键入)对象类型,则可以执行以下操作:

std::shared_ptr<int> sharedPtr(std::move(uniquePtr));

的构造函数std::shared_ptr将负责删除操作。


但是,如果希望推断类型,则:

auto sharedPtr = make_shared_from(std::move(uniquePtr));

在哪里make_shared_from

template<typename T, typename D>
std::shared_ptr<T> make_shared_from(std::unique_ptr<T,D> && p)
{
   //D is deduced but it is of no use here!
   //We need only `T` here, the rest will be taken 
   //care by the constructor of shared_ptr
   return std::shared_ptr<T>(std::move(p));
};

希望能有所帮助。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

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

来自分类Dev

具有自定义删除程序类的STL向量和unique_ptr

来自分类Dev

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

来自分类Dev

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

来自分类Dev

是否有一种方便的方法来使unique_ptr自动具有诸如shared_ptr的删除器?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

具有自定义指针类型的unique_ptr:* get()和operator *()给出不同的输出

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

Shared_ptr自定义删除器

来自分类Dev

具有unique_ptr成员和自定义析构函数的对象的向量

来自分类Dev

配备有功能指针作为自定义删除器的unique_ptr是否与shared_ptr大小相同?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

带有自定义运算符的unique / shared_ptr =

来自分类Dev

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

来自分类Dev

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

来自分类Dev

shared_ptr<> 的自定义删除器给出“无上下文错误”

来自分类Dev

unique_ptr 的有状态自定义删除器

来自分类Dev

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

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

    具有自定义删除程序类的STL向量和unique_ptr

  4. 4

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

  5. 5

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

  6. 6

    是否有一种方便的方法来使unique_ptr自动具有诸如shared_ptr的删除器?

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

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

  11. 11

    具有自定义指针类型的unique_ptr:* get()和operator *()给出不同的输出

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

    Shared_ptr自定义删除器

  17. 17

    具有unique_ptr成员和自定义析构函数的对象的向量

  18. 18

    配备有功能指针作为自定义删除器的unique_ptr是否与shared_ptr大小相同?

  19. 19

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

  20. 20

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

  21. 21

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

  22. 22

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

  23. 23

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

  24. 24

    带有自定义运算符的unique / shared_ptr =

  25. 25

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

  26. 26

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

  27. 27

    shared_ptr<> 的自定义删除器给出“无上下文错误”

  28. 28

    unique_ptr 的有状态自定义删除器

  29. 29

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

热门标签

归档