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

詳解C++?中?shared_ptr?weak_ptr

 更新時間:2022年07月23日 10:54:29   作者:vaughn.huang  
shared_ptr?是一個標準的共享所有權(quán)的智能指針,允許多個指針指向同一個對象,定義在?memory?文件中,命名空間為?std,這篇文章主要介紹了C++?中?shared_ptr?weak_ptr,需要的朋友可以參考下

shared_ptr

shared_ptr 是一個標準的共享所有權(quán)的智能指針,允許多個指針指向同一個對象,定義在 memory 文件中,命名空間為 std。shared_ptr最初實現(xiàn)于Boost庫中,后由 C++11 引入到 C++ STL。shared_ptr 利用引用計數(shù)的方式實現(xiàn)了對所管理的對象的所有權(quán)的分享,即允許多個 shared_ptr 共同管理同一個對象。

std::shared_ptr<int> sp1 = new int();  // shared count = 1, weak count = 0
std::shared_ptr<int> sp2(sp1);         // shared count = 2, weak count = 0
std::shared_ptr<int> sp3 = sp2;        // shared count = 3, weak count = 0

std::weak_ptr<int> wp1(sp1);           // shared count = 3, weak count = 1
std::weak_ptr<int> wp2(wp1);           // shared count = 3, weak count = 2
std::weak_ptr<int> wp3 = wp2;          // shared count = 3, weak count = 3

shared_ptr weak_ptr 使用 reset 或者指向另一個 managed object導致 shared count或weak count相應的減一。

1.類繼承中使用shared_ptr

class Base {};
class Derived : public Base {};
......
shared_ptr<Derived> dp1(new Derived);
shared_ptr<Base> bp1 = dp1;
shared_ptr<Base> bp2(dp1);
shared_ptr<Base> bp3(new Derived);

2.casting shared_ptr

shared_ptr<Base> base_ptr (new Base);
shared_ptr<Derived> derived_ptr;
// if static_cast<Derived *>(base_ptr.get()) is valid, then the following is valid:
derived_ptr = static_pointer_cast<Derived>(base_ptr);

3.make_shared

使用shared_ptr = new int(),會導致兩次內(nèi)存分配:int對象的內(nèi)存分配跟shared_ptr內(nèi)部的 manager object 一次內(nèi)存分配。make_shared 對此進行了優(yōu)化,一次性分配 int + manager object 內(nèi)存空間大小。
make_shared 用法:

shared_ptr<Thing> p (make_shared<Thing>(42, "I'm a Thing!"));
shared_ptr<Base> bp(make_shared<Derived1>());     // shared_ptr中的 template參數(shù)與make_shared中的tmeplate參數(shù)可以不一樣(繼承關系)

使用 weak_ptr

void do_it(weak_ptr<Thing> wp){
shared_ptr<Thing> sp = wp.lock(); // get shared_ptr from weak_ptr
if(sp)
sp->defrangulate(); // tell the Thing to do something
else
cout << "The Thing is gone!" << endl;
}

也可以直接從weak_ptr構(gòu)建shared_ptr,這個時間如果weak_ptr過期(通過 weak_ptr::expired() 可以查詢),則拋出異常:

void do_it(weak_ptr<Thing> wp){
shared_ptr<Thing> sp(wp); // construct shared_ptr from weak_ptr
// exception thrown if wp is expired, so if here, sp is good to go
sp->defrangulate(); // tell the Thing to do something
}

到此這篇關于C++ 中 shared_ptr weak_ptr的文章就介紹到這了,更多相關C++  shared_ptr weak_ptr內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 減少C++代碼編譯時間的簡單方法(必看篇)

    減少C++代碼編譯時間的簡單方法(必看篇)

    下面小編就為大家?guī)硪黄獪p少C++代碼編譯時間的簡單方法(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C語言動態(tài)開辟內(nèi)存詳解

    C語言動態(tài)開辟內(nèi)存詳解

    這篇文章主要為大家詳細介紹了C語言動態(tài)開辟內(nèi)存,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++變量引用的概念介紹

    C++變量引用的概念介紹

    這篇文章主要介紹了C++變量引用的概念介紹,簡單提到了與指針概念的不同,通過代碼場景分析給大家介紹的非常詳細,需要的朋友可以參考下
    2021-08-08
  • C語言示例講解do?while循環(huán)語句的用法

    C語言示例講解do?while循環(huán)語句的用法

    在不少實際問題中有許多具有規(guī)律性的重復操作,因此在程序中就需要重復執(zhí)行某些語句。一組被重復執(zhí)行的語句稱之為循環(huán)體,能否繼續(xù)重復,決定循環(huán)的終止條件
    2022-06-06
  • C++使用UDP通訊的實現(xiàn)示例

    C++使用UDP通訊的實現(xiàn)示例

    本文實現(xiàn)對C++使用UDP做了簡單封裝,實現(xiàn)通訊,包括服務端和客戶端,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-12-12
  • C++實現(xiàn)推箱子游戲

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

    這篇文章主要為大家詳細介紹了C++實現(xiàn)推箱子游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C++?中如何結(jié)束?while?(cin>>str)?的輸入

    C++?中如何結(jié)束?while?(cin>>str)?的輸入

    這篇文章主要介紹了C++?中如何結(jié)束?while?(cin>>str)?的輸入,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C語言超全面define預處理指令的使用說明

    C語言超全面define預處理指令的使用說明

    C語言里可以用#define定義一個標識符來表示一個常量。特點是:定義的標識符不占內(nèi)存,只是一個臨時的符號,預編譯后這個符號就不存在了,也不做類型定義。預編譯又叫預處理
    2022-04-04
  • C語言中strlen()函數(shù)的使用詳解

    C語言中strlen()函數(shù)的使用詳解

    strlen函數(shù)是用來求字符串長度的函數(shù),這個函數(shù)遇到‘\0’就會停止,且這個長度不包含‘\0’,這篇文章給大家介紹了C語言中strlen()函數(shù)的使用,感興趣的朋友一起看看吧
    2024-02-02
  • C++實現(xiàn)簡單的圖書管理系統(tǒng)

    C++實現(xiàn)簡單的圖書管理系統(tǒng)

    本文給大家分享的是使用C++實現(xiàn)簡單的圖書管理系統(tǒng)的代碼,本系統(tǒng)采用了面向?qū)ο蟮某绦蛟O計方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-08-08

最新評論