最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++智能指針weak_ptr的作用詳解

 更新時(shí)間:2023年08月28日 16:44:18   作者:大魚(yú)不吃魚(yú)(wanna)  
weak_ptr是一個(gè)智能指針,也是一個(gè)類(lèi)模板,本文主要介紹了C++智能指針weak_ptr的作用詳解,具有一定的參考價(jià)值,感興趣的可以了解一下

當(dāng)使用std::shared_ptr時(shí),循環(huán)引用可能會(huì)導(dǎo)致資源泄漏的問(wèn)題。下面是一個(gè)簡(jiǎn)單的示例,展示了循環(huán)引用導(dǎo)致資源泄漏的情況:

#include <iostream>
#include <memory>
class A;
class B;
class A {
public:
    std::shared_ptr<B> b_ptr_;
    A() {
        std::cout << "A constructor" << std::endl;
    }
    ~A() {
        std::cout << "A destructor" << std::endl;
    }
};
class B {
public:
    std::shared_ptr<A> a_ptr_;
    B() {
        std::cout << "B constructor" << std::endl;
    }
    ~B() {
        std::cout << "B destructor" << std::endl;
    }
};
int main() {
    std::shared_ptr<A> a_ptr(new A());
    std::shared_ptr<B> b_ptr(new B());
    a_ptr->b_ptr_ = b_ptr;  // A持有B的shared_ptr
    b_ptr->a_ptr_ = a_ptr;  // B持有A的shared_ptr
    return 0;
}

在上述示例中,類(lèi)A和類(lèi)B相互持有對(duì)方的std::shared_ptr。這樣就形成了循環(huán)引用,因?yàn)閮蓚€(gè)對(duì)象彼此引用對(duì)方的std::shared_ptr,導(dǎo)致引用計(jì)數(shù)永遠(yuǎn)不會(huì)變?yōu)?,資源無(wú)法正確釋放。

當(dāng)main()函數(shù)結(jié)束時(shí),a_ptrb_ptr超出了作用域,它們的析構(gòu)函數(shù)被調(diào)用,但由于循環(huán)引用的存在,對(duì)象AB的析構(gòu)函數(shù)不會(huì)被調(diào)用,資源無(wú)法被釋放,從而導(dǎo)致資源泄漏。

為了避免循環(huán)引用導(dǎo)致的資源泄漏,可以使用std::weak_ptr來(lái)打破循環(huán)引用,如下所示:

#include <iostream>
#include <memory>
class A;
class B;
class A {
public:
    std::shared_ptr<B> b_ptr_;
    A() {
        std::cout << "A constructor" << std::endl;
    }
    ~A() {
        std::cout << "A destructor" << std::endl;
    }
};
class B {
public:
    std::weak_ptr<A> a_ptr_;
    B() {
        std::cout << "B constructor" << std::endl;
    }
    ~B() {
        std::cout << "B destructor" << std::endl;
    }
};
int main() {
    std::shared_ptr<A> a_ptr(new A());
    std::shared_ptr<B> b_ptr(new B());
    a_ptr->b_ptr_ = b_ptr;  // A持有B的shared_ptr
    b_ptr->a_ptr_ = a_ptr;  // B持有A的weak_ptr
    return 0;
}

在上述示例中,類(lèi)B的成員變量a_ptr_使用std::weak_ptr來(lái)持有A的弱引用,這樣不會(huì)增加A對(duì)象的引用計(jì)數(shù)。當(dāng)A對(duì)象被釋放時(shí),std::weak_ptr會(huì)自動(dòng)失效,不會(huì)影響資源的釋放。這樣就打破了循環(huán)引用,避免了資源泄漏的問(wèn)題。

到此這篇關(guān)于C++智能指針weak_ptr的作用詳解的文章就介紹到這了,更多相關(guān)C++智能指針weak_ptr內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++結(jié)構(gòu)體與類(lèi)指針知識(shí)點(diǎn)總結(jié)

    C++結(jié)構(gòu)體與類(lèi)指針知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理了關(guān)于C++結(jié)構(gòu)體與類(lèi)指針知識(shí)點(diǎn)以及相關(guān)內(nèi)容,有興趣的朋友們參考學(xué)習(xí)下。
    2019-09-09
  • C++實(shí)現(xiàn)LeetCode(18.四數(shù)之和)

    C++實(shí)現(xiàn)LeetCode(18.四數(shù)之和)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(18.四數(shù)之和),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 數(shù)據(jù)結(jié)構(gòu) 中數(shù)制轉(zhuǎn)換(棧的應(yīng)用)

    數(shù)據(jù)結(jié)構(gòu) 中數(shù)制轉(zhuǎn)換(棧的應(yīng)用)

    這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu) 中數(shù)制轉(zhuǎn)換(棧的應(yīng)用)的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C++語(yǔ)法中的函數(shù)重載和默認(rèn)參數(shù)

    C++語(yǔ)法中的函數(shù)重載和默認(rèn)參數(shù)

    這篇文章主要介紹了C++語(yǔ)法中的函數(shù)重載和默認(rèn)參數(shù),本文從語(yǔ)法角度通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 基于C++中覆蓋,重載,隱藏的一點(diǎn)重要說(shuō)明

    基于C++中覆蓋,重載,隱藏的一點(diǎn)重要說(shuō)明

    下面小編就為大家?guī)?lái)一篇基于C++中覆蓋,重載,隱藏的一點(diǎn)重要說(shuō)明。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • c++ vector造成的內(nèi)存泄漏問(wèn)題

    c++ vector造成的內(nèi)存泄漏問(wèn)題

    這篇文章主要介紹了c++ vector造成的內(nèi)存泄漏問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Typedef在C語(yǔ)言和C++中的用法和區(qū)別

    Typedef在C語(yǔ)言和C++中的用法和區(qū)別

    在C語(yǔ)言和C++中,typedef是一個(gè)非常常用的關(guān)鍵字,用于為數(shù)據(jù)類(lèi)型定義別名,盡管它在兩種語(yǔ)言中都有相似的功能,但由于C++具有更豐富的類(lèi)型系統(tǒng),因此在實(shí)際應(yīng)用中,typedef在兩者間的使用存在一些微妙的差異
    2024-01-01
  • C++實(shí)現(xiàn)list增刪查改模擬的示例代碼

    C++實(shí)現(xiàn)list增刪查改模擬的示例代碼

    本文主要介紹了C++實(shí)現(xiàn)list增刪查改模擬,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • C++插入排序算法實(shí)例詳解

    C++插入排序算法實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了C++插入排序算法實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • MFC中Radio Button的用法詳解

    MFC中Radio Button的用法詳解

    這篇文章主要介紹了MFC中Radio Button的用法,需要的朋友可以參考下
    2014-07-07

最新評(píng)論

醴陵市| 梅河口市| 讷河市| 盱眙县| 凤台县| 肃宁县| 南丹县| 黑山县| 沾化县| 太湖县| 白河县| 大关县| 临漳县| 汝阳县| 舞钢市| 平远县| 红原县| 普宁市| 颍上县| 木兰县| 肇源县| 乌什县| 巴楚县| 尤溪县| 巴东县| 临湘市| 屏山县| 峡江县| 广德县| 新和县| 即墨市| 曲靖市| 前郭尔| 南部县| 白水县| 锡林郭勒盟| 蓝田县| 洪湖市| 元朗区| 白银市| 镇雄县|