為了更容易的使用動態記憶體,標準庫提供了兩種智慧型指標型別來管理動態物件
。智慧型指標的行為類似於普通指標。不過重要的區別在於它負責自動釋放與之關聯的
記憶體。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...