首页 > 代码库 > 关于autoptr
关于autoptr
参考自: 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释放内存了。
关于autoptr