boost的共享所有權share ptr指標

2021-08-29 23:49:52 字數 1172 閱讀 4608

1:share_ptr指標相當於所有股東放棄股權,公司才會轉讓;scoped_ptr相當於乙個人擁有公司,他放棄股權,公司也就轉讓出去了;

2:shared_ptr使用引用計數,每乙個shared_ptr的拷貝都指向相同的指向相同的記憶體,每次拷貝,引用計數加一;

3:例項:使用方法和std的智慧型指標是一樣的

#include class a;

int main()

4:share_ptr的使用陷阱

1)不能引用棧記憶體,scoped_ptr也一樣

int a=10;//區域性變數

boost::shared_ptrp1(&a);

//因為智慧型指標釋放一次,棧記憶體被系統釋放一次,因此會報錯;編譯通過,執行出錯;

2)不能多次引用同一原始指標,否則同一記憶體會被delete多次;

int *pint =new int(0);

boost::shared_ptrp1(pint );//不會出錯

boost::shared_ptrp2(pint );//出錯

boost::shared_ptrp2(p1 );//這種沒問題

3)迴圈引用,導致記憶體洩漏

class a

~a(){}

boost::shared_ptrm_pb;

}; class b

~b(){}

boost::shared_ptrm_pa;

};boost::shared_ptrpa(new a);

boost::shared_ptrpb(new b);

pa->m_pb=pb;

pb->m_pa=pa;

//此操作會出錯,pa,pb在析構時,引用計數都只減一,因此會導致記憶體洩漏

4)shared_ptr使用的是delete來刪除記憶體,因此要注意記憶體是否是剛new出來的

int *pint = (int*)malloc(sizeof(int));

boost::shared_ptrp(pint);//編譯可以通過,不報錯,但是有問題,

a *a=(*a)malloc(sizof(a));

boost::shared_ptrp(a);//報錯

賬號所有權

關於區塊鏈 三 賬戶的所有權 傳統銀行系統 銀行卡 密碼 開戶時會記錄個人的資訊用於該賬號的所有權 位元幣系統 密碼 私鑰 私鑰 shshhfihduhdihfihsihfihdihw8ihidhhfieuiu2i374 hash hash fun shshhfihduhdihfihsihfihdi...

賬戶所有權問題

誰能用 2a38cba2390fde 位址支付,誰就擁有這個賬戶的所有權 私鑰 sdhgkdnhgggsdjuufjlkkhsuhfggdngbf hash hash fun sdhgkdnhgggsdjuufjlkkhsuhfggdngbf 2a38cba2390fde 位元幣中乙個位址對應乙個私...

std move轉換所有權

在c 11中,標準庫在中提供了乙個有用的函式std move,std move並不能移動任何東西,它唯一的功能是將乙個左值強制轉化為右值引用,繼而可以通過右值引用使用該值,以用於移動語義。從實現上講,std move基本等同於乙個型別轉換 static cast lvalue 作用是 轉換所有權,注...