缺少shared_ptr和weak_ptr之间的相等性

abe*_*ier 11 c++ shared-ptr c++11

虽然我不明白为什么没有operator==shared_ptrunique_ptr,我不知道为什么有没有为shared_ptrweak_ptr.特别是因为你可以创建weak_ptr一个引用shared_ptr.我认为99%的时间都是你想要的lhs.get() == rhs.get().我现在要继续向我的代码介绍,除非有人能给我一个充分的理由,为什么不应该做这样的事情.

CB *_*ley 17

weak_ptr没有get()方法,因为你需要weak_ptr在访问底层指针之前显式锁定.明确这一点是一个深思熟虑的设计决策.如果转换是隐式的,那么编写代码将是非常容易的,如果shared_ptr对象的最后一个被销毁,而从中获取的基础指针weak_ptr仍然被检查.

这个提升页面很好地描述了陷阱,为什么weak_ptr有这么有限的界面.

如果您需要进行快速比较,那么您可以这样做shared == weak.lock().如果比较结果为真,那么您知道weak必须仍然有效,因为您shared_ptr对同一个对象保持独立.如果比较返回false,则没有这样的保证.