stl智慧型指標auto ptr

2021-06-29 03:20:40 字數 1671 閱讀 1494

感覺auto_ptr還是存在一些不足的,效率十分低,而且丟失了一般指標方便常用的操作,如++,--等,auto_ptr只過載了=,*,->這幾個操作符,所以使用很不方便。

一、說明:int *a = null;delete a;//do nothing

應此auto_ptr的析構函式是這樣子的:

~auto_ptr()  

二、auto_ptr中有乙個很重要的函式release

_ty *release() _throw0()

_ty *_tmp = _myptr;

_myptr = 0;

return (_tmp);

}

該函式的作用是將自身指標交給release的返回值,而自身指標指null

三、 每次拷貝的時候都會呼叫release函式

auto_ptrp1(new int);

//執行以下**後,p1將失效,p1=null

auto_ptrp2(p1);或auto_ptrp2 = p1;

這樣可以保證只有乙個auto_ptr指標指向每個new 對像,從而避免重複delete,

不過也有乙個最大的弊病,就是不符合使用習慣,

如果在賦值後使用原指標,將導致使用null指標而崩潰。

個人覺得,如果使用引用計數,當乙個記憶體區不再被任何指標指向時delete掉,這樣可能會好一點。

封裝了指標類用起來跟指標本身一樣才好.所以需要過載-> , * 等運算子

template< class t>

class my_auto_ptr

~my_auto_ptr()

t& operator*()

t*  operator->() }

現在my_auto_ptr可以變得很像指標了

my_auto_ptrmp(new int(88) );   //等價int* ip = new int(88);

int num = *mp;   //等價int num = *ip;

假如有這樣的類struct arwen

則my_auto_ptrmp( new arwen);   //等價arwen* ip = new arwen;

mp->test();  //等價ip-test();

乙個完善點的類往往還涉及到複製構造的一些操作.也可以做把另外乙個智慧型指標類做為建構函式的引數,或者通過=給乙個類賦值

template< class t>

class my_auto_ptr

public:

explicit my_auto_ptr( t* p = 0) :m_ptr( p )

~my_auto_ptr()

t& operator*()

t* operator->()

my_auto_ptr(my_auto_ptr& mp)

my_auto_ptr& operator=(my_auto_ptr& ap)

return *this;

}void reset(t* p)

};

stl智慧型指標auto ptr

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

STL 智慧型指標auto ptr

c 中指標申請和釋放記憶體通常採用的方式是new和delete。然而標準c 中還有乙個強大的模版類就是auto ptr,它可以在你不用的時候自動幫你釋放記憶體。下面簡單說一下用法。cpp view plain copy 用法一 std auto ptrm example new myclass 用法...

auto ptr智慧型指標

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