<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    weak_ptr的一點認識

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    近期在補充和梳理C++方面的知識的時候,遇到了WeakPtr這個概念和用法,不甚明白,Google出了一堆文字,包括Boost的shared_ptr和weak_ptr的比較,以及其他一些博客里面給的例子以及解釋。

    其中有一個是這樣解釋的,原文大意:在C++的weak_ptr里面,有兩類指針,一類是擁有對象的生命周期;另一類不擁有,只有訪問權。

     

    在這里,我就有點不明白,這兩類指針,到底會在編寫上面,或者形式上面,有什么區別呢?

    或者說weak_ptr到底要解決編程當中的什么問題呢? 為什么會有這個類型被提出?

     

    經過和一位朋友的討論,有了答案。

     

    比如現在有兩個函數

    class A;

    void Func1(A* a);

    void Func2(A* a);

     

    A* a = new A;

     

    Func1(a);

    Func2(a);

     

    他們在同一個作用域的時候,a 被釋放后,慣有的操作是 a = NULL這個時候Func2 或者 Func1中都可以判斷到這個變化。

     

    但是如果Func1在另外一個線程/進程里面,你在傳遞過來的時候a并不是空的a,但是指向的對象,已經被釋放了,這個指針已經不在有權限去訪問了。那么就會出現問題。

     

    所以weak_ptr就出現了,讓你在使用資源之前,先去問下HasWeakPtr() 如果有,那么表明這個資源還沒有被釋放,可以放心去用,否則就應該不能再使用了。

     

    以往的代碼,寫法: if (a) {} 

    但是*a 已經被釋放之后,其實a并沒有在上下文被a  = NULL 所以a 還是指向那個地址,但是地址指向的內容已經非法了。

     

    一點點小認識,希望對于大家對weak_ptr的理解有所幫助。

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全