參考自: http://www.cppblog.com/expter/archive/2009/03/29/78270.html
auto_ptr是什么。
解釋1.auto_ptr是一個管理指針的對象,防止內存泄漏和便于程序員編程時的內存管理
解釋2.auto_ptr所做的事情,就是動態分配對象以及當對象不再需要時自動執行清理。
值得注意的是auto_ptr是一個"對象" 而非指針。
原理(摘自EFFECTIVE C++ 條款13):當把資源放進對象內,當控制流離開函數,對象的析構函數會自動釋放那些資源,
所以實際上是 C++的"析構函數自動調用機制"確保資源被釋放。
auto_ptr的應用地方
取代局部指針變量
類的指針成員變量
總體來說就是防止函數在運行到delete資源之前突然退出,導致沒有把資源delete回收出現的內存泄漏。
用auto_ptr需要引用的頭文件:
#include<memory>
局限性:
1.auto_ptr不能指向數組
2.不要將auto_ptr對象作為STL容器的元素
3.不能通過賦值操作來初始化auto_ptr (會使得原來的指針指向變為NULL)

1 // 自定義一個仿智能指針 2 template<typename Type> 3 class Auto_ptr 4 { 5 public: 6 Auto_ptr(Type *p =NULL) :Ptr(p) 7 { } 8 ~Auto_ptr() 9 { 10 delete Ptr; 11 } 12 Type* operator ->() 13 { 14 return Ptr; 15 } 16 private: 17 Type *Ptr; 18 };
可以看出其內部十分簡單,大概原理也就如此 但這個類只適用于操縱類成員或者類函數,操縱普通數據如int float也可以,但不能輸出其值,因為沒有重載<<運算符
使用示例:
Auto_ptr<string> sw(new string("wwss"));
sw->append("ssss");
string q = sw->substr(0,sw->length()-1);
cout<<q<<endl;
再回到stl版本的auto_ptr
一般來說 auto_ptr管理的對象是類的指針成員變量
如class A
A* a = new A();
auto_ptr<A> ss(a); //這樣把a放進了ss里面管理,之后就可以用ss代替a進行操作。
之后就不用使用delete a釋放內存了。
文章列表