auto ptr智慧型指標

2021-06-13 12:20:12 字數 1511 閱讀 6385

1、class auto_ptr 這個智慧型指標應該保證,無論在何種情形下,只要自己被摧毀,就一定連帶釋放其所指資源。而由於智慧型指標本身就是區域變數,所以無論是正常退出,還是異常退出,只要函式退出,它就一定會被銷毀。

注意:auto_ptr不允許使用一般指標慣用的賦值(assign)初始化方式。必須直接使用數值來完成初始化:

s td::auto_ptrptr1(new classa);        //ok  

std::auto_ptrptr2 = new classa;        //error

auto_ptr所界定的乃是一種嚴格的擁有權觀念。也就是說,由於乙個auto_ptr會刪除其所指物件,所以這個物件絕對不能同時被其他物件「擁有」。絕對不應該出現多個auto_ptrs同時擁有乙個物件的情況。

//initializean auto_ptr with a new object

std::auto_ptrptr1 (new classa);

//copy theauto_ptr and transfers ownership from ptr1 to ptr2

std::auto_ptrptr2 (ptr1);

在第乙個語句中,ptr1擁有了那個new出來的物件。在第二個語句中,擁有權由ptr1轉交給ptr2.此後ptr2就擁有了那個new出來的物件,而ptr1不再擁有它。這樣,物件就只會被delete一次——在ptr2被銷毀的時候。

2、總而言之,常數型auto_ptr減少了「不經意轉移擁有權」所帶來的危險。只要乙個物件通過autor_ptr傳遞,就可以使用常數型auto_ptr來終結擁有權轉移鏈,此後擁有權將不能再進行轉移。

std::auto_ptrf()

conststd::auto_ptrp(new int);  //no ownership transfer possible

std::auto_ptrq(new int);                     //ownership transfer possible

*p= 42;             //ok, change value towhich p refer

bad_print(p);  //compile-time error

*p= *q;      //ok, change value to which prefer

p= q;                  //compile-timeerror

returnp;   //compile-time error

如果使用const auto_ptr作為引數,對新物件的任何賦值操作都將導致編譯期錯誤。就常數特性而言,const auto_ptr比較類似常數指標(t* const p),而非指向常數的指標(const t* p)。

3、auto_ptr的常見錯誤運用

a.auto_ptr之間不能共享擁有權

b.並不存在針對array而設計的auto_ptrs

c.auto_ptrs決非乙個「四海通用」的智慧型指標

d.auto_ptrs不滿足stl容器對其元素的要求

智慧型指標 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...

stl智慧型指標auto ptr

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