auto ptr使用介紹

2021-10-23 07:16:41 字數 2976 閱讀 3076

auto_ptr 是c++ 98定義的智慧型指標模板,其定義了管理指標的物件,可以將new 獲得(直接或間接)的位址賦給這種物件。當物件過期時,其析構函式將使用delete 來釋放記憶體!

使用建議:

盡可能不要將auto_ptr 變數定義為全域性變數或指標。

除非自己知道後果,不要把auto_ptr 智慧型指標賦值給同型別的另外乙個智慧型指標。

c++11 後auto_ptr 已經被「拋棄」,已使用unique_ptr替代!

示例**如下:

#include

#include

#include

#include

using

namespace std;

//auto_ptr< test> t(new test()); //忠告1: 智慧型指標不要定義為全域性變數

class

test

~test()

intgetdebug()

private

:int debug;};

//用 法: auto_ptr《型別》 變數名(new 型別)

void

memory_leak_demo1()

return;}

intmemory_leak_demo2()

//delete t;

return0;

}int

main()

catch (exception e) */

system

("pause");

return0;

}

auto_ptr的原始碼如下,雖然不能完全看懂還是貼在這裡:

#if _has_auto_ptr_etc

// class template auto_ptr

template

<

class

_ty>

class

auto_ptr

;template

<

class

_ty>

struct auto_ptr_ref

_ty* _ref;

// generic pointer to auto_ptr ptr};

template

<

class

_ty>

class

auto_ptr

auto_ptr

(auto_ptr& _right)

noexcept

:_myptr

(_right.

release()

)auto_ptr

(auto_ptr_ref<_ty> _right)

noexcept

template

<

class

_other

>

operator auto_ptr<_other>()

noexcept

template

<

class

_other

>

operator auto_ptr_ref<_other>()

noexcept

template

<

class

_other

>

auto_ptr&

operator

=(auto_ptr<_other>

& _right)

noexcept

template

<

class

_other

>

auto_ptr

(auto_ptr<_other>

& _right)

noexcept

:_myptr

(_right.

release()

) auto_ptr&

operator

=(auto_ptr& _right)

noexcept

auto_ptr&

operator

=(auto_ptr_ref<_ty> _right)

noexcept

~auto_ptr()

noexcept

_nodiscard _ty&

operator*(

)const

noexcept

_nodiscard _ty*

operator

->()

const

noexcept

_nodiscard _ty*

get(

)const

noexcept

_ty*

release()

noexcept

void

reset

(_ty* _ptr =

nullptr

)noexcept

_myptr = _ptr;

}private

: _ty* _myptr;

};

auto_ptr是用於c++11之前的智慧型指標。由於 auto_ptr 基於排他所有權模式:兩個指標不能指向同乙個資源,複製或賦值都會改變資源的所有權。auto_ptr 主要有如下幾個問題:

#include

#include

#include

#include

#include

using namespace std;

intmain()

cout <<"str: " << *p2 << endl;

}*/system

("pause");

return0;

}

所以,c++11用更嚴謹的unique_ptr 取代了auto_ptr!

AUTO PTR使用總結

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

auto ptr使用總結

1 auto ptr的意義 auto ptr是一種智慧型指標,當系統異常退出的時候避免資源洩漏 記憶體 其他的資源還對應其他的智慧型指標。2 auto ptr的使用 std auto ptrtest new int 1 test將是乙個auto ptr的物件,使用乙個int指標進行初始化。test可...

auto ptr使用總結

1 auto ptr的意義 auto ptr是一種智慧型指標,當系統異常退出的時候避免資源洩漏 記憶體 其他的資源還對應其他的智慧型指標。2 auto ptr的使用 std auto ptrtest new int 1 test將是乙個auto ptr的物件,使用乙個int指標進行初始化。test可...