C++/提升共享资源类,用于管理资源生命周期,如shared_ptr
C++ / Boost shared resource class for managing resource lifecycle like shared_ptr
Boost或其他任何东西都包含一个容器,它的作用是否类似于共享指针,但允许我控制共享"资源"在其生命周期结束时会发生什么?我想封装一个可以传递的对象,但是当不再需要时,可以以上下文定义的方式关闭。
例如,我可能想要创建并传递文件句柄,知道当它超出范围时,该文件将自动关闭,但我不想删除句柄。
我可以自己实现它,但如果框架已经存在,我宁愿不进入它 - 毫无疑问有人做得更好。我不能使用 boost::shared_ptr
,至少不是正常形式,因为资源不应该在生命周期结束时被删除。
你知道std::shared_ptr
可以采用自定义删除器类吗?这实际上不需要使用"删除"或"free",但可以很容易地使用某种其他类型的机制(例如引用计数机制的release
等)。
这里有一个非常简单的例子:
std::shared_ptr<FILE> foo(fopen("la", "r"), fclose);
删除器只需要是一个函数,它采用shared_ptr
包装的指针类型。在这种情况下,当foo超出范围时,shared_ptr
将为您关闭文件。(注意:这不是一个完全明智的实现,因为没有检查任何错误值。这只是一个例子)。
如果您使用的是支持 C++11 std::shared_ptr
的编译器,其中一个构造函数采用自定义的"删除器"函数。这将允许您编写自己的函数来"释放"资源。
编辑-我忘记了 std::shared_ptr 实际上是在 C++TR1 更新中,所以如果你的编译器支持 TR1,你应该处于良好状态。
由于您不能使用 Boost 或 std::shared_ptr,因此您可以编写一个具有自定义 Deleter 的智能指针,无论是共享的还是唯一的。
相关文章:
- 如何在共享库的整个生命周期内存储数据
- 如何理解句子的生命周期始于对e的评估
- 它解决了什么问题,对于非真空初始化,生命周期在初始化之前就开始了
- Go/C++gRPC客户端通道和存根生命周期
- 如何将"this"的生命周期移动到C++中的另一个对象中?
- 是否可以通过使用移动/交换 c++11 来延长返回的临时变量的生命周期
- 使用对象的生命周期作为设置器的安全性
- 临时人员的生命周期传递给函数
- 我想知道在构造函数中初始化变量时的生命周期
- Lua 用户数据生命周期管理
- 如何使用 epoll(void* event.data.ptr) 管理 Connection 的生命周期
- C++引用的生命周期
- 在堆栈上有一个对象,而不是在函数的整个生命周期内
- 在 Boost ASIO 服务器中处理生命周期
- C++ lambda 生命周期
- 使用互斥锁跟踪另一个应用的生命周期
- QSharedPointer 或 std::shared_ptr 的生命周期
- 来自async_resolve的 boost::asio::ip::tcp::resolver::iterator 的生命周期是多久?
- 如何调整属于类的唯一指针的字符数组的大小.它必须在程序的整个生命周期中保持活力
- 延长 std::tuple<int&,int> 的生命周期,方法是将其分配给 const std::tuple<int, int>&