我编写了一个库,它公开了对几个相关对象类型的引用.所有这些对象的生命周期都由库内部管理boost::shared_ptr
根据库的性质,库的用户还能够知道任何暴露对象的寿命.因此,他们可以存储指针或保持对这些对象的引用.他们这样做是合理的,并知道这些对象何时不再有效.
但我感到内疚,迫使我的用户合理.
让库暴露weak_ptr
给它的对象是否可以接受?还有其他图书馆吗?
我已经在应用程序中描述了这个库的用法,并且发现它对于完全暴露而言过于关键任务weak_ptr
.
让匹配的API函数暴露引用或 weak_ptr或使任何对象能够暴露weak_ptr
自身是否更明智?
如果smart_ptr
s已经可以直接访问库的用户,那么他们已经可以访问weak_ptr
s,只需通过相应weak_ptr
的构造函数即可.但如果smart_ptr
s都是图书馆的内部,那就是另一回事了.
在这种情况下,weak_ptr
除了您的图书馆提供的任何其他访问之外,我还建议让每个对象传递给自己.这为用户提供了最大的灵活性:如果他们需要weak_ptr
,他们可以立即访问它; 如果他们需要shared_ptr
,他们可以很容易地得到它; 如果他们只需要访问对象本身,他们可以完全忽略智能指针.
当然,我不知道你的库是做什么的,或者它是如何使用或设计的.这可能会改变我的建议.