概述
weak_ptr是一種不控制所指向對象生存期的智能指針,它指向一個由shared_ptr管理的對象。將一個weak_ptr綁定到一個shared_ptr不會改變shared_ptr的引用計數。並且一旦最后一個shared_ptr被銷毀,其所指向的對象就會被釋放,就算此時仍有weak_ptr指向該對象,也會被釋放。
由於對象可能不存在,我們不能用weak_ptr直接訪問對象,而必須調用lock。這個函數檢查weak_ptr指向的對象是否仍存在。例如:
if (shared_ptr<int> np = np.lock()) { // 如果np不為空則條件成立
cout << *np << endl; // 此時可以訪問其對象
}
常用操作 | 用法說明 |
---|---|
weak_ptr< T > w | 可以指向類型為T的對象的空week_ptr |
weak_ptr< T > w(sp) | 與shared_ptr sp指向相同對象的weak_ptr。T必須能轉換為sp指向的類型 |
w = p | p可以是一個shared_ptr或一個weak_ptr。賦值后w與p共享對象 |
w.reset() | 將w置空 |
w.use_count() | 與w共享對象的shared_ptr的數量 |
w.expired() | 如果w.use_count()為0則返回true,否則返回false |
w.lock() | 如果w.expired()為true,返回一個空shared_ptr,否則返回其綁定的shared_ptr |