c 之智慧型指標

2021-09-24 11:38:23 字數 2721 閱讀 5654

為了更容易的使用動態記憶體,標準庫提供了兩種智慧型指標型別來管理動態物件

。智慧型指標的行為類似於普通指標。不過重要的區別在於它負責自動釋放與之關聯的

記憶體。1.shared_ptr類

shared_ptr允許多個指標指向同乙個物件,同時,shared_str也是一種模板。

預設初始化的shared_ptr智慧型指標儲存著乙個空指標。看下面的**

#includeusing namespace std;

class text

~text()

private:

string s;

int a;

};void environment()//搭建實驗環境

void main()

同樣的,我們可以在類中使用智慧型指標,看下面的**

#include#include#include#includeusing namespace std;

class text

~text()

private:

int a;

shared_ptrs;

};void environment()//搭建實驗環境

void main()

我們使用的是string的類,我們不知道析構函式到底被執行幾次,不過我們可以自己寫乙個類

來測試一下,看下面的**:

#include#include#include#includeusing namespace std;

class mystring//為了方便,我寫的簡單一點

~mystring()

private:

string s;

};class text

~text()

private:

int a;

shared_ptrs;

};void environment()//搭建實驗環境

//當函式結束時我們析構了mystring一次,代表,我們可以利用智慧型指標來讓不同的類型別共享一塊記憶體空間

void main()

我們可以發現,這就是智慧型指標的好處,它使我們管理記憶體開始變的方便起來.

我們觀察上面的**,我們使用new來初始化智慧型指標,不過我們必須使用直接初始化,

因為智慧型指標建構函式是explicit的。

2.使用我們自己的釋放操作

看下面的**

#include#include#includeusing namespace std;

class mystring//我們使用了動態分配內

string *s;

};void deletestring(mystring *s1)

int main()

system("pause");

return 0;

}

在有些情況下。有一些類是c和c++都要使用的類,那麼自定義釋放操作便有了重要意義.

3.unique_ptr物件

某個時刻,unique_ptr只能指向乙個給定物件,且沒有make_shared的函式返回乙個

unique_ptr,所以我們只能採取直接初始化。

看下面的**

unique_ptra(new int(56));//建立乙個unique_ptr物件

unique_ptrb(a);//不支援普通的賦值與拷貝

unique_ptrc;

c = a;//不支援賦值

雖然我們不能拷貝或賦值乙個unique_ptr,但我們可以把其中乙個unique_ptr的所有權

轉給另外乙個。

看下面的**

unique_ptra(new int(56));//建立乙個unique_ptr物件

unique_ptrb(a.release());//利用release,release返回乙個a當前儲存的指標,並且把a置為空

unique_ptrc(new int(50));

b.reset(c.release());//reset如果提供了指標,那麼讓b指向c,且釋放lb的資源。

a.release();//注意不要這樣寫,因為現在我們的a會指向null,那麼我們原來的空間就無法釋放了。

我們可以拷貝或賦值乙個將要被摧毀的unique_ptr,看下面的**。

unique_ptrtext()

unique_ptrtext()

4.weak_ptr

weak_ptr是一種不控制所指向物件生存期的智慧型指標,它指向乙個由

shared_ptr管理的物件,將乙個weak_ptr繫結到shared_ptr上不會改變

shared_ptr的引用計數。所以我們可以把這種共享稱之為弱共享,

下面有乙個簡單的例子

#include#include#include#includeusing namespace std;

int main()

a_ptr.reset();

if (!a1_ptr.lock())

system("pause");

return 0;

}

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棄用。智慧型指標從書面意思來說,就是智慧型。主要是動態記憶體的使用很容易出問題,要在正確的時間正確釋放記憶體是很困難的。有時我們可能忘了釋放記憶體...

c 之智慧型指標

設計出乙個class像指標,但是功能更強大,分為兩種形式一種是標準庫的源 早期的指標,多半是過載 和 第二種是迭代器的智慧型指標 1.早期的智慧型指標 templateclass shared ptr t operator const shared ptr t p px p private t px...