欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

當(dāng)使用std::shared_ptr時(shí),循環(huán)引用可能會(huì)導(dǎo)致資源泄漏的問題。下面是一個(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;
}

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

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

為了避免循環(huán)引用導(dǎo)致的資源泄漏,可以使用std::weak_ptr來打破循環(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;
}

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

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

相關(guān)文章

  • c語言左移和右移的示例詳解

    c語言左移和右移的示例詳解

    這篇文章主要介紹了c語言左移和右移的示例詳解,移位操作符的兩個(gè)操作數(shù)必須是整型的。整個(gè)移位表達(dá)式的值的類型也是整型的,而且,左移位操作符與右移位操作符的運(yùn)算并不對(duì)稱。
    2020-07-07
  • OpenGL實(shí)現(xiàn)貝塞爾曲線或曲面

    OpenGL實(shí)現(xiàn)貝塞爾曲線或曲面

    這篇文章主要為大家詳細(xì)介紹了OpenGL實(shí)現(xiàn)貝塞爾曲線或曲面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 定義vim配置文件vimrc用于c/c++編程

    定義vim配置文件vimrc用于c/c++編程

    vim作為L(zhǎng)inux下廣受贊譽(yù)的代碼編輯器,其獨(dú)特的純命令行操作模式可以很大程度上方便編程工作,通過自定義vim配置文件可以實(shí)現(xiàn)對(duì)vim功能的個(gè)性化設(shè)置。這篇文章主要介紹了定義vim配置文件vimrc,用于c/c++編程 ,需要的朋友可以參考下
    2018-10-10
  • C++ 單例模式的幾種實(shí)現(xiàn)方式研究

    C++ 單例模式的幾種實(shí)現(xiàn)方式研究

    單例模式,可以說設(shè)計(jì)模式中最常應(yīng)用的一種模式了,據(jù)說也是面試官最喜歡的題目。但是如果沒有學(xué)過設(shè)計(jì)模式的人,可能不會(huì)想到要去應(yīng)用單例模式,面對(duì)單例模式適用的情況
    2019-01-01
  • C++實(shí)現(xiàn)推箱子小游戲

    C++實(shí)現(xiàn)推箱子小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)推箱子小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • C++ random_shuffle()方法案例詳解

    C++ random_shuffle()方法案例詳解

    這篇文章主要介紹了C++ random_shuffle()方法案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++?TCP網(wǎng)絡(luò)編程詳細(xì)講解

    C++?TCP網(wǎng)絡(luò)編程詳細(xì)講解

    TCP/IP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,它會(huì)保證數(shù)據(jù)不丟包、不亂序。TCP全名是Transmission?Control?Protocol,它是位于網(wǎng)絡(luò)OSI模型中的第四層
    2022-09-09
  • linux c多線程編程實(shí)例代碼

    linux c多線程編程實(shí)例代碼

    這篇文章主要介紹了linux系統(tǒng)中的c多線程編程實(shí)例,大家可以參考使用以下代碼
    2013-11-11
  • 一文帶你初識(shí)C++和命名空間

    一文帶你初識(shí)C++和命名空間

    C++是在C語言基礎(chǔ)上發(fā)展的面向?qū)ο笳Z言,C++支持過程化、面向?qū)ο蠹俺橄髷?shù)據(jù)類型的程序設(shè)計(jì),C++的發(fā)展包括多個(gè)版本,下面這篇文章主要介紹了一文帶你初識(shí)C++和命名空間的相關(guān)資料,需要的朋友可以參考下
    2024-10-10
  • C++中的函數(shù)知識(shí)點(diǎn)大全

    C++中的函數(shù)知識(shí)點(diǎn)大全

    這篇文章介紹了C++中的函數(shù)知識(shí)點(diǎn),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04

最新評(píng)論