Eka*_*vya 5 c++ smart-pointers shared-ptr weak-ptr
当您希望使用弱指针进行访问时,建议您首先通过锁定来获取指向所指向对象的强指针。如果先前删除了指向的对象,锁定可能不会成功。
在我看来,除非你在打破循环来决定什么是弱指针时犯了错误,否则锁定将会成功。所以你锁定只是为了交叉检查你的设计。
它是否正确?
我看过一些关于缓存的评论,但它们看起来像是对weak_ptr的滥用。但当然,一个人的虐待是另一个人的创新。我想听听意见。
如果您weak_ptr只是用来打破循环,那么是的,shared_ptr从中获取应该总是成功的。
但这并不是唯一的用途。Matthieu M. 给出了一个使用它们的例子。
您提到了缓存,对于weak_ptr没有循环的情况来说,这是一个很好的用例,而且我根本不认为这是一种滥用。如果您有一个系统其他部分(另一个线程或缓存)拥有的对象,并且您想要存储对该对象的引用以供以后使用,如果您使用 a 来shared_ptr引用该对象,那么您共享该对象的所有权并会延长其使用寿命。如果您不确定稍后是否需要该对象,因此不想延长其生命周期,您可以使用 aweak_ptr并在需要时检查它是否仍然存在。如果它不存在,您会找到一个不同的对象或再次创建它(这可能会很慢,例如需要数据库查询,这就是为什么您希望尽可能重用现有对象。)