我编写了一个库,公开了对多个相关对象类型的引用。所有这些对象的生命周期都由库在内部通过 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/