原文來自:
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就是用來訪問這種不確定是否存在的對象的。