我开始研究 C++11 的智能指针,但我没有看到std::weak_ptr. 有人可以告诉我什么时候std::weak_ptr有用/必要吗?
std::weak_ptr
一个很好的例子是缓存。
对于最近访问的对象,您希望将它们保存在内存中,因此您持有指向它们的强指针。您会定期扫描缓存并确定哪些对象最近未被访问。您不需要将它们保存在内存中,因此您摆脱了强指针。
但是,如果该对象正在使用中并且其他一些代码拥有指向它的强指针怎么办?如果缓存摆脱了它唯一指向对象的指针,它就再也找不到它了。因此,缓存会保留一个指向对象的弱指针,如果它们碰巧留在内存中,则需要查找这些对象。
这正是弱指针所做的——它允许您在对象仍然存在时定位它,但如果没有其他需要它,则不会保留它。