另一个答案,希望更简单。(对于其他Google员工)假设您有Team和Member对象。显然,这是一种关系:Team对象将具有指向的指针Members。而且成员也可能有指向其Team对象的后向指针。然后,您将有一个依赖周期。如果使用shared_ptr,则放弃引用时将不再自动释放对象,因为它们以循环方式相互引用。这是内存泄漏。您可以使用来打破这一点weak_ptr。“所有者”通常使用shared_ptr与“拥有”使用weak_ptr它的父,并将其转换暂时到shared_ptr时,它需要访问它的父。存储一个弱ptr:weak_ptr<Parent> parentWeakPtr_ = parentSharedPtr; // automatic conversion to weak from shared然后在需要时使用它shared_ptr<Parent> tempParentSharedPtr = parentWeakPtr_.lock(); // on the stack, from the weak ptrif( !tempParentSharedPtr ) { // yes, it may fail if the parent was freed since we stored weak_ptr} else { // do stuff}// tempParentSharedPtr is released when it goes out of scope