資源共享型智慧型指標實現方式簡述

2021-06-18 08:59:54 字數 790 閱讀 2797

資源共享型智慧型指標實現方式簡述

資源共享型的智慧型指標有兩種實現方式:一種是侵入式;一種是非侵入式。

網上以及書籍比較常見的是非侵入式的,它的實現完全放在智慧型指標模板類內。

模板類有乙個用於儲存資源類物件的指標變數和乙個用於記錄資源物件引用計數的指標變數。

兩者是所有的智慧型指標物件共享的,所以通過指標儲存。

侵入式則不同,它的實現分散在智慧型指標模板和使用資源物件類中:

模板類只有乙個用於儲存資源物件的指標變數,資源物件的引用計數卻放在資源物件類中。

非侵入式智慧型指標,它的引用計數變數為了保證所有物件共享,需要用堆裡的記憶體。

因此需要用new,其實這點兩者都一樣,不一樣的是使用new的次數。

侵入式智慧型指標的引用計數變數儲存在資源物件內,因為物件是唯一的,所以引用計數也是唯一的。

相比非侵入式智慧型指標,侵入式智慧型指標的利弊:

優點:

1> 乙個資源物件無論被多少個侵入式智慧型指標包含,從始至終只有乙個引用計數變數。

不需要在每乙個使用智慧型指標物件的地方都new乙個計數物件,這樣子效率比較高,使用記憶體也比較少,且比較安全;

2> 因為引用計數儲存在資源物件本身,所以在函式呼叫的時候可以直接傳遞資源物件位址,而不用擔心引用計數值丟失。

(非侵入式智慧型指標物件的拷貝,必須帶著智慧型指標模板,否則就會出現物件引用計數丟失)。

缺點:

1> 資源物件類必須有引用計數變數,並且該變數的增減允許被侵入式智慧型指標模板類操作。

2> 如果該資源類物件並不沒有必要使用智慧型指標時,它還是會帶著引用計數變數。

共享型智慧型指標的實現share pointer

智慧型指標是乙個類,它產生的是乙個類物件,而不是乙個原生的指標物件,但是為了減少類物件與針對物件使用的差異性,所以share ptr類故意過載了兩種常見的指標操作符 和 從而share ptr與普通指標使用方式一樣。簡言之,就是share ptr生成的乙個包含型別指標容器物件,它封裝了指標物件,對指...

智慧型指標之共享指標

智慧型指標是儲存指向動態分配物件指標的類。三種智慧型指標 std shared ptr std unique ptr std weak ptr.使用時需要加上標頭檔案 include 1.共享智慧型指標 shared ptr 初始化 shared ptr初始化可以通過reset方法初始化shared...

Python實現程序資源共享

程序是cpu最小的資源分配的單位。程序之間的資源是不能共享的。但是執行緒之間的資源可以是共享的。下面簡單的介紹兩種方法實現程序之間資源的共享。1 queue 方法 usr bin envpython coding utf 8 from multiprocessing import process,q...