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