C 智慧型指標auto ptr

2022-04-12 11:25:46 字數 1250 閱讀 8836

template

class

auto_ptr ;

//

建構函式

templateinline auto_ptr

::auto_ptr(t *p)

: pointee(p)

{}//拷貝建構函式

templateinline auto_ptr

::auto_ptr(auto_ptr&rhs)

: pointee(rhs.release())

{}template

inline auto_ptr

::~auto_ptr()

template

template

inline auto_ptr

& auto_ptr::operator=(auto_ptr&rhs)

template

inline t& auto_ptr::operator*() const

template

inline t* auto_ptr::operator->() const

template

inline t* auto_ptr::get() const

template

inline t* auto_ptr::release()

template

inline

void auto_ptr::reset(t *p)

}

沒看過stl原始碼剖析,感覺這個智慧型指標只是在自己要管理的記憶體資源上封裝成類,這樣利用物件解析時自動呼叫析構函式的思想,來保證delete的執行。

//摘自網上

stl中智慧型指標 auto_ptr(c++98)所做的事情,就是動態分配物件以及當物件不再需要時自動執行清理。

但是auto_ptr有缺陷,在使用時要注意避免。

不要將auto_ptr物件作為stl容器的元素。c++標準明確禁止這樣做,否則可能會碰到不可預見的結果。

1、auto_ptr不能共享所有權。

2、auto_ptr不能指向陣列

3、auto_ptr不能作為容器的成員。

4、不能通過賦值操作來初始化auto_ptr

std::auto_ptrp(new int(42)); //ok

std::auto_ptrp = new int(42); //error

這是因為auto_ptr 的建構函式被定義為了explicit

5、不要把auto_ptr放入容器

C 智慧型指標 auto ptr

智慧型指標 auto ptr vc版本 擁有權管理和轉移 當乙個智慧型指標給另乙個智慧型指標初始化的時候,兩個智慧型指標將會同時指向乙個空間,這樣在物件析構的時候,會導致一塊空間釋放多次的問題,所以乙個物件從始至終只能擁有乙個智慧型指標,這樣就保證不會乙個物件多次釋放的問題.我們讓指標給指標初始化的...

C 智慧型指標(auto ptr)

智慧型指標 在c 中使用堆記憶體是非常頻繁的操作,堆記憶體的申請和釋放都由程式設計師自己管理。使用普通指標,容易造成堆記憶體洩露,二次釋放等問題,使用智慧型指標能更好的管理堆記憶體。c 11中引入了智慧型指標的概念,方便管理堆記憶體。棧 堆區別 棧 系統開闢 系統釋放 堆 手動開闢 手動釋放 設計 ...

C 智慧型指標 auto ptr

auto ptr是智慧型指引,可以自我銷毀而不像new出來的物件一樣需要呼叫delete銷毀。auto ptr賦值用引起所有權的交接,作為函式引數或返回值都會引起所有權的交接。auto ptr必須顯示初始化 auto ptrp new int 43 ok auto ptrp new int 43 e...