我是否必须使用weak_ptr.lock()来测试它是否指向有效对象?

Edd*_*223 9 c++ shared-ptr weak-ptr

为了查看weak_ptr是否指向有效对象,创建临时shared_ptr似乎效率低下.我甚至不想访问该对象.这是因为我有一个从shared_ptr的向量返回weak_ptr的函数,如果它返回一个空的weak_ptr,那么这意味着该对象不存在该GUID.

所以我只是测试对象是否存在.

有没有另一种方法来检查weak_ptr是否为空,而不创建shared_ptr?

Arm*_*yan 20

您可以使用expired()成员函数.

  • @Pubby:我更喜欢使用`if(someVector.empty())`而不是`if(someVecor.size()== 0)`.在这种情况下,我更喜欢"过期".更明确 (4认同)
  • @Pubby,请参阅链接中的注释:"`expired()`可能比`use_count()`更快." (2认同)