c cpp中auto ptr用法分析

2021-08-26 19:39:22 字數 1346 閱讀 3729

// auto_ptr example

#include #include using namespace std;

int main ()

cout << "p1 points to " << *p1 << "\n";

return 0;

}

猜測一下這段程式的輸出?如果不出意外,得到的結果應該是如下這樣的。

p2 points to 10

segmentation fault (core dumped)

你可能會奇怪,為什麼對p1的引用會出現段錯誤了呢?好吧,我們來看一下auto_ptr的源**。

namespace std 

};templateclass auto_ptr

// copy constructors (with implicit conversion)

// - note: nonconstant parameter

auto_ptr (auto_ptr& rhs) throw() : ap(rhs.release())

templateauto_ptr (auto_ptr& rhs) throw() : ap(rhs.release())

// assignments (with implicit conversion)

// - note: nonconstant parameter

auto_ptr& operator= (auto_ptr& rhs) throw()

templateauto_ptr& operator= (auto_ptr& rhs) throw()

// destructor, 注意這裡釋放記憶體。。

~auto_ptr() throw()

// value access

t* get() const throw()

t& operator*() const throw()

t* operator->() const throw()

// release ownership

t* release() throw()

// reset value

void reset (t* ptr=0) throw()

}}}

一般我們會認為智慧型指標都是採用一種引用計數的方式來管理已分配的記憶體,也就是說會在最後乙個智慧型指標物件呼叫析構函式時將分配的記憶體釋放掉,然而仔細看auto_ptr的源**會發現,其實它的實現並沒有採用引用計數的方式來實現,因為只要任何乙個auto_ptr物件呼叫析構函式,記憶體就一定會被釋放掉,這就是為何對p1的引用會出現段錯誤,因為p2在對p1引用之前已經將分配的記憶體給釋放掉了。

auto ptr作用和用法

標準auto ptr智慧型指標機制很多人都知道,但很少使用它。這真是個遺憾,因為auto ptr優雅地解決了c 設計和編碼中常見的問題,正 確地使用它可以生成健壯的 本文闡述了如何正確運用auto ptr來讓你的 更加安全 以及如何避免對auto ptr危險但常見的誤用,這些 誤用會引發間斷性發作 ...

C 中auto ptr智慧型指標的用法詳解

智慧型指標 auto ptr 這個名字聽起來很酷是不是?其實auto ptr 只是c 標準庫提供的乙個類模板,它與傳統的new delete控制記憶體相比有一定優勢,但也有其侷限。本文總結的8個問題足以涵蓋auto ptr的大部分內容。auto ptr是什麼?auto ptr 是c 標準庫提供的類模...

C CPP中的網路API和庫

socket wininet winhttp這三個是windows的api。socket是指win32api中的socket api,是最底層的,更低的tcp等不使用。wininet的目的是給開發客戶端用的。基於ie瀏覽器底層,可以cache頁面,cookie和cache都儲存在ie瀏覽器的相應目錄...