auto_ptr是c++標準庫中()為了解決資源洩漏的問題提供的乙個智慧型指標類模板(注意:不是c++11標準中定義的,且這只是一種簡單的智慧型指標)。使用auto_ptr主要是為了防止資源洩漏,我們通常在建構函式中申請,析構函式中釋放,但是只有構造函式呼叫成功,析構函式才會被呼叫,換句話說,如果在建構函式中產生了異常,那麼析構函式將不會呼叫,這樣就會造成資源洩漏的隱患。
#include //標準建構函式初始化
std::auto_ptrp_auto1(new int(1024));
cout << "p_auto1 value is:" << *p_auto1 << endl;
//操作符『=』初始化
std::auto_ptrp_auto2(new int(2048));
std::auto_ptrp_auto3 = p_auto2;
cout << "p_auto3 value is:" << *p_auto1 << endl;
這是其操作符定義:
void reset (x* p=0) throw();
從**可以看出函式為reset()函式提供了預設的引數,要是沒有帶入引數進來的話,就將指標的值賦值為null(0)。也可以傳入乙個新的指標,像這樣
auto_p1.reset (new int);
*auto_p1=5;
std::cout << *auto_p1 << '\n';
auto_ptr的銷毀是這樣的定義的,銷毀的時候會返回指標指向的物件
x* release() throw();
在下面的測試**中輸出的結果會是2048
int* p_int = p_auto3.release();
cout << "p_int value:" << *p_int << endl;
當進行賦值操作的時候
std::auto_ptrp_auto2(new int(2048));
std::auto_ptrp_auto3 = p_auto2;
p_auto2轉移所有權,因此之後在對p_auto2取值的時候就會報錯,可以通過get函式來檢視當前的指標,就會發現當前的指標已經為nullptr了
(1)auto_ptr不能共享所有權,即不要讓兩個auto_ptr指向同乙個物件。
(2)auto_ptr不能指向陣列,因為auto_ptr在析構的時候只是呼叫delete,而陣列應該要呼叫delete。
(3)auto_ptr只是一種簡單的智慧型指標,如有特殊需求,需要使用其他智慧型指標,比如share_ptr。
(4)auto_ptr不能作為容器物件,stl容器中的元素經常要支援拷貝,賦值等操作,在這過程中auto_ptr會傳遞所有權
C auto ptr智慧型指標的用法
c auto ptr智慧型指標的用法 c 中指標申請和釋放記憶體通常採用的方式是new和delete。然而標準c 中還有乙個強大的模版類就是auto ptr,它可以在你不用的時候自動幫你釋放記憶體。下面簡單說一下用法。cpp view plain copy 用法一 std auto ptrm exa...
C auto ptr智慧型指標的用法
c auto ptr智慧型指標的用法 c 中指標申請和釋放記憶體通常採用的方式是new和delete。然而標準c 中還有乙個強大的模版類就是auto ptr,它可以在你不用的時候自動幫你釋放記憶體。下面簡單說一下用法。cpp view plain copy print?用法一 std auto pt...
C auto ptr智慧型指標的用法
c 中指標申請和釋放記憶體通常採用的方式是new和delete。然而標準c 中還有乙個強大的模版類就是auto ptr,它可以在你不用的時候自動幫你釋放記憶體。下面簡單說一下用法。用法一 std auto ptrm example new t 用法二 std auto ptrm example m ...