C++/提升共享资源类,用于管理资源生命周期,如shared_ptr

C++ / Boost shared resource class for managing resource lifecycle like shared_ptr

本文关键字:周期 生命 shared ptr 资源 用于 共享资源 C++ 管理      更新时间:2023-10-16

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 的智能指针,无论是共享的还是唯一的。