如何将std :: unique_ptr <T>与返回int的接口一起使用?

Ego*_*sin 5 c++ shared-ptr c++11

我想将open/ closePOSIX API 包装成与RAII兼容的对象std::unique_ptr.但是open函数返回一个int(即不是a HANDLE,它是指针void),我不知道如何使用std::unique_ptr模板类int.有人能帮帮我吗?

Ste*_*ger 2

真的,您想要的只是为您管理 close(int fileHandle) ,对吗?为什么不创建一个带有析构函数的简单 C++ 类来为您调用 close() 呢?我认为这就是您正在寻找的行为。

std::shared_ptr 和朋友只处理用 new 创建的堆指针,并且会调用 delete ptr,而不是您在这里寻找的东西。

编辑:费尔南德斯先生的观点很好。shared_ptr<> 为您管理引用计数,因此将其与来自 ac lib 调用的不透明句柄(例如文件句柄)的自定义删除器一起使用是一件非常合理的事情,尽管对于其他团队成员来说有点棘手。它也直接回答了OP的问题。

以下是Herb Sutter 网站上有关该主题的有趣讨论。

  • 你在开玩笑吧?将shared_ptr与自定义删除器一起使用(即它的构建目的)是棘手的代码,但自己重新实现shared_ptr则不是? (5认同)
  • @EgorTensin 然后使用 `std::shared_ptr&lt;MyPosixWrapper&gt;`。`MyPosixWrapper` 负责分配和销毁(并且不需要可复制),`std::shared_ptr` 负责提供复制构造它的能力。每个类都有一个目的并且很简单,但组合起来却是强大的。 (4认同)