原文来自:
http://imcc.blogbus.com/logs/162618478.html
在C++11中,我们可以使用shared_ptr管理某个对象的所有权,负责对象的析构。然而在某些情况下,我们只是希望安全的访问某个对象,而不想拥有这个对象的所有权,对这个的析构负责(有点像电视剧中的那些不负责任的男人哦,只是玩玩而已,不会负责)。在这种情况下,我们可以使用表示弱引用的weak_ptr。
weak_ptr可以由一个shared_ptr构建,表示这个weak_ptr拥有这个shared_ptr所指向的对象的访问权,注意,这里仅仅是访问权,它不会改变智能指针的引用计数,自然也就不会去析构这个对象。利用weak_ptr,我们就可以安全地访问那些不具备所有权的对象。
一个现实中的例子就是学校的传达室,传达室拥有一本学生的名单,如果某个电话来了找某个学生,传达室会根据花名册去尝试访问这个学生,如果这个学生还在学校,就直接呼叫这个学生,如果已经离开了,这给这个学生留一个消息。在这里,花名册上的学生可能还在学校(对象还存在),也可能已经离开学校(对象已经析构),我们都需要对其进行访问,而weak_ptr就是用来访问这种不确定是否存在的对象的。