c 智慧型指標介紹之shared ptr

2021-09-26 03:16:11 字數 2584 閱讀 3539

template< class y >

shared_ptr

(const shared_ptr

& r ) noexcept;

// 左值拷貝構造

shared_ptr

( shared_ptr&& r ) noexcept;

// 右值拷貝構造

shared_ptr& operator=

(const shared_ptr& r ) noexcept;

// 賦值運算子

t*get()

const noexcept;

// 返回原始指標

long

use_count()

const noexcept // 返回引用計數值

shared_ptr

sp(new son

(2222

,"ddddddddd"))

;shared_ptr

sp2(new son

(2222

,"ddddddddd"))

;sp = sp2;

// 支援複製操作,sp原來物件釋放,sp2引用計數+1

cout << sp2.

use_count()

<< endl;

// use_count返回引用計數值 為2

// 建構函式時explicit的

shared_ptr<

int>

clone

(int p)

shared_ptr sp3 = make_shared

(2432

,"dfaf");

// 類似emplace,直接傳建構函式的引數

sp3->

print()

; cout << sp3.

unique()

<< endl;

// 返回true:1

shared_ptr<

int>

ap(new int(2

));// 1

shared_ptr<

int>

ap2(ap)

;// 拷貝構造,2

shared_ptr<

int> ap3;

ap3 = ap2;

// 複製操作 3

cout << ap3.

use_count()

<< endl;

//3

shared_ptr<

int>

sp(new int[3

],(int

*p))

;

shared_ptr p

// 自定義刪除器d

p.reset

// p接管q的資源,同時指定刪除器為d2

class base

; virtual ~

base()

public:

int age_;

string name_;};

auto del =

(base *base)

// 與unique_ptr的區別

shared_ptr

sp(new base

(333

,"***"

), del)

; unique_ptrdecltype

(del)

>

up(new base

(333

,"***"

), del)

:

shared_ptr sp3 = make_shared

(2432

,"dfaf");

shared_ptr

sp4(std::

move

(sp3));

cout << sp4.

use_count()

<< endl;

// 1

cout << sp3.

use_count()

<< endl;

// 0

make_shared總是會建立乙個控制塊,從unique_ptr物件、auto_ptr物件出發建立乙個shared_ptr時也會建立乙個控制塊,當使用裸指標來構造乙個shared_ptr時也會建立乙個控制塊。

備註:

class base 

; virtual ~

base()

public:

int age_;

string name_;};

class son : public base ;~

son()}

;// 如果父類析構不virtual,也會多型釋放記憶體

shared_ptr

p1(new son(2

,"***"))

;

c 智慧型指標介紹之auto ptr

作用及特性 智慧型指標的引用,主要是為了解決異常發生時產生記憶體洩漏。auto ptr在建立的時候獲取物件的所有權,在析構的時候,釋放物件記憶體空間 raii1 過載了函式的 和 運算子,使得其操作看起來像個內建指標。沒有使用引用計數,在複製構造或賦值的時候發生所有權轉移 包含的操作 拷貝構造 賦值...

C 之智慧型指標

本文發表於1999年10月份的c c users journal,17 10 1.為什麼稱它為 自動 指標?auto ptr只是眾多可能的智慧型指標之一。許多商業庫提供了更複雜的智慧型指標,用途廣泛而令人驚異,從管理引用的數量到提供先進的 服務。可以把標準c auto ptr看作智慧型指標的ford...

C 之智慧型指標

c 中有四個智慧型指標 auto ptr,shared ptr,weak ptr,unique ptr,其中後三個是c 11支援,並且第乙個已經被c 11棄用。智慧型指標從書面意思來說,就是智慧型。主要是動態記憶體的使用很容易出問題,要在正確的時間正確釋放記憶體是很困難的。有時我們可能忘了釋放記憶體...