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...