【原】C++ 11智能指標之week_ptr

來源:互聯網
上載者:User
    week_ptr是對對象的一種弱引用,它不會增加對象的引用計數。week_ptr和shared_ptr之間可以相互轉換,shared_ptr可以直接賦值給week_ptr,week_ptr可通過調用lock函數來獲得shared_ptr(如果對象已經被釋放,則返回一個空的shared_ptr)。    單純使用shared_ptr有時會產生問題,考慮下面的代碼:
 1 class A; 2 class B; 3 typedef shared_ptr<A> A_Share; 4 typedef shared_ptr<B> B_Share; 5 class A 6 { 7 public: 8         B_Share m_b; 9 };10 11 class B12 {13 public:14         A_Share m_a;15 };16 17 A_Share a(new A());18 B_Share b(new B());19 a.m_b = b;20 b.m_a = a;

    在上面的代碼中,a和b相互進行引用。在a和b離開範圍時,a和b的引用計數都是1,記憶體沒有正常釋放。解決方案是將A和B中的任意一個類聲明的變數改為week_ptr類型的。比如,修改類B後的代碼如下:

1 class B2 {3 public:4        week_ptr<A>  m_a;5 }

    修改後,b.m_a = a不會增加A對象的引用計數,因此a離開範圍時,引用計數為0。B對象的引用計數為2,在a和b離開範圍時,引用計數各減1後也為0。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.