C auto ptr智慧型指標

2021-08-03 18:02:06 字數 1473 閱讀 6496

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