智慧型指標 auto ptr與shared ptr

2021-08-15 02:13:35 字數 1016 閱讀 8978

auto_ptr

auto_ptr是當年c++標準庫中提供的一種智慧型指標。auto_ptr在構造時獲取某個物件的所有權,在析構時釋放該物件。可以提高**的安全性。例如:

int *p = new int(0);

auto_ptrap(p);

auto_ptr主要是解決被異常丟擲時發生資源洩露問題。

注意:

1)auto_ptr析構的時候會刪除它所擁有的那個物件,所以兩個auto_ptr不能同時擁有同乙個物件。例如:

int *p = new int(0);

auto_ptrap1(p);

auto_ptrap2(p);

兩個智慧型指標都認為自己管理指標p,在析構時都試圖刪除p。兩次刪除同乙個物件的行為是錯誤的。

2)auto_ptr不應該用來管理乙個陣列指標,auto_ptr析構時刪除指標用的是delete,而不是delete。例如:

int *pa = new int[10];

auto_ptrap(pa);//錯誤的使用

3)auto_ptr不具有值語義(value semantic),所以auto_ptr不能被用在stl標準容器中。所謂值語義,是指符合以下條件的型別(假設有類a):

a a1;

a a2(a1);

a a3;

a3 = a1;

則:a2 == a1, a3 == a1;

很明顯,auto_ptr不符合上述條件,stl標準容器要用到大量的拷貝賦值操作。

shared_ptr

shared_ptr是boost庫提供了一種新型的智慧型指標,它解決了在多個指標間共享物件所有權的問題,同時特滿足容器對元素的要求。即可以安全地放入容器中。

auto ptr智慧型指標

1 class auto ptr 這個智慧型指標應該保證,無論在何種情形下,只要自己被摧毀,就一定連帶釋放其所指資源。而由於智慧型指標本身就是區域變數,所以無論是正常退出,還是異常退出,只要函式退出,它就一定會被銷毀。注意 auto ptr不允許使用一般指標慣用的賦值 assign 初始化方式。必須...

智慧型指標 AutoPtr

include include include using namespace std void func autoptr 析構函式來負責釋放 void test catch exception e autoptr 析構函式來負責釋放 private t ptr struct aa void fun...

stl智慧型指標auto ptr

感覺auto ptr還是存在一些不足的,效率十分低,而且丟失了一般指標方便常用的操作,如 等,auto ptr只過載了 這幾個操作符,所以使用很不方便。一 說明 int a null delete a do nothing 應此auto ptr的析構函式是這樣子的 auto ptr 二 auto p...