关于auto_ptr的一些事

参考自: 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)


// 自定义一个仿智能指针
template<typename Type>
class Auto_ptr
{
public:
	Auto_ptr(Type *p =NULL) :Ptr(p)
	{     }
	~Auto_ptr()
	{
		delete Ptr;
	}
	Type* operator ->()
	{
		return Ptr;
	}
private:
	Type *Ptr;
};
可以看出其内部十分简单,大概原理也就如此 但这个类只适用于操纵类成员或者类函数,操纵普通数据如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释放内存了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
3 目录 说明 ..................................................................................................................... 1. 如何做动画 ................................................................................................. 2. OpenFOAM 第 5 次 workshop ................................................................... 3. OpenFOAM 中不可压缩湍流大涡求解器 oodles 说明 ........................... 4. OpenFOAM 中的神奇方程定义方式的背后 ............................................. 5. OpenFOAM 中雷诺时均湍流求解器 turbFoam 使用 ............................... 6. pimple 算法简述 (2009-09-30 09:22:33) 转载 .......................................... 7. 粒子方法讨论版开版 .................................................................................. 8. 面向对象—我的一点理解 .......................................................................... 9. 如何搞多面体网格 ...................................................................................... 10. OpenFOAM-1.6-ext 的安装过程探讨 ................................................... 11. 多态实现及其子类父类数据传递的方式 ............................................. 12. OpenFOAM 与有限元程序包 deal.II 的无缝耦合方法 ........................ 13. CAD->GAMBIT->CFD几何 ...................................................................... 14. OpenFOAM 中非均匀初始场的设定 ..................................................... 15. OpenFOAM-1.6 中 sample 的使用 ......................................................... 16. 利用 pyFOAM 残差的输出 ...................................................................... 17. 也来谈谈传值和传址 .............................................................................. 18. 从 pisoFoam 谈谈 OpenFOAM-1.6 湍流模型的结构变化 ................... 19. 非惯性旋转系统稳态求解器 simpleSRFFoam的使用 ........................ 20. linux 常用命令集 ..................................................................................... 21. 一起看看 OpenFOAM-1.6 中的 pisoFoam .......................................... 22. 一起看看 OpenFOAM-1.6 中的 pisoFoam .......................................... 23. 深入解析 OpenFOAM 时间控制参数字典文件 controlDict ................. 24. OpenFOAM 中的智能指针 autoPtr ........................................................ 25. 如何实现同一用户下的 OpenFOAM 多版本编译 ................................ 26. 商业软件划分的网格向 OpenFOAM 转换应注意的问题 .................... 27. OpenFOAM 如何定义与时间有关的边界条件 ..................................... 28. OpenFOAM 中 transportModel 与 viscosityModels 关系 .................... 29. OpenFOAM 不可压缩流边界条件的设定之我见 ................................. 30. OpenFOAM 中气液双欧拉求解器 bubbleColumn 的使用 .................. 31. OpenFOAM 不可压缩非牛顿流体层流求解器使用说明 ..................... 32. OpenFOAM 中不可压缩稳态求解器 simpleFoam 的使用 .................. 33. 深入解析 OpenFOAM 离散格式参数字典文件 fvSchemes................. 34. 如何使得 OpenFOAM 的 solver 自动调节时间步长 ........................... 35. OpenFOAM 中不可压缩流大涡求解器 oodles 的使用 ....................... 36. OpenFOAM 中的不可压缩湍流流动求解器 turbFoam 的说明 .......... 37. 深入解析 icoFoam 下的顶盖驱动流 (cavity) .........................................

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值