c++ - 在库接口(interface)中提供对 weak_ptr 的访问是否明智?

标签 c++ boost weak-ptr

我编写了一个库,公开了对多个相关对象类型的引用。所有这些对象的生命周期都由库在内部通过 boost::shared_ptr 管理。

根据库的性质,库的用户还可以知道任何公开对象的生命周期。所以他们可以存储指针或保留对这些对象的引用。他们这样做并知道这些对象何时不再有效是合理的。

但我对强制我的用户讲道理感到内疚。

公开库是否可以接受 weak_ptr的对象?其他图书馆有这样做吗?

我已经分析了这个库在应用程序中的使用情况,发现它对任务至关重要,无法公开 weak_ptr独家。

让匹配的 API 函数公开一个引用一个 weak_ptr 或使任何对象能够公开一个 weak_ptr 是否更明智?对自己?

最佳答案

如果库的用户已经可以直接访问 smart_ptr,那么他们已经可以访问 weak_ptr,只需通过相应的 weak_ptr 的构造函数。但如果 smart_ptr 都在库内部,那就另当别论了。

在这种情况下,我建议让每个对象将 weak_ptr 传递给自己,以及您的库提供的任何其他访问权限。这为用户提供了最大的灵 active :如果他们需要一个 weak_ptr,他们可以立即访问它;如果他们需要一个shared_ptr,他们可以很容易地得到它;如果他们只需要访问对象本身,他们可以完全忽略智能指针。

当然,我不知道你的图书馆是做什么的,也不知道它是如何使用或设计的。这可能会改变我的建议。

关于c++ - 在库接口(interface)中提供对 weak_ptr 的访问是否明智?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/631380/

相关文章:

c++ - 混淆的 C++ 翻译 : float&, 两个 for 循环

c++ - 使用 Boost MPI 发送文件?

c++ - 如何制作 std::weak_ptr 的 c++11 std::unordered_set

c++ - 不匹配 operator== (weak_ptr, const weak_ptr)

c++ - 以 weak_ptr 作为参数的函数重载决议

c++ - 将像素传递给 glTexImage2D() 后像素会发生什么变化?

c# - 当它的一些参数是委托(delegate)时,是否可以在 C# 中使用 "C++ Library Function"?

c++ - 使用线程反转字符串

c++ - 将巨大的 boost dynamic_bitset vector 写入文件并将其读回的有效方法

c++ - 在 boost for_each 中运行成员函数 vector