智能指針之weak_ptr


概述

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM