我们需要智能指针?
来源:互联网 发布:淘宝试用中心报名技巧 编辑:程序博客网 时间:2024/05/16 07:10
有三种典型的情况适合使用智能指针:
资源所有权的共享
要写异常安全的代码时
避免常见的错误,如资源泄漏
共享所有权是指两个或多个对象需要同时使用第三个对象的情况。这第三个对象应该如何(或者说何时)被释放?为了确保释放的时机是正确的,每个使用这个共享资源的对象必须互相知道对方,才能准确掌握资源的释放时间。从设计或维护的观点来看,这种耦合是不可行的。更好的方法是让这些资源所有者将资源的生存期管理责任委派给一个智能指针。当没有共享者存在时,智能指针就可以安全地释放这个资源了。
异常安全,简单地说就是在异常抛出时没有资源泄漏并保证程序状态的一致性。如果一个对象是动态分配的,当异常抛出时它不会被删除。由于栈展开以及指针离开作用域,资源可以会泄漏直至程序结束(即使是程序结束时的资源回收也不是语言所保证的)。不仅可能程序会由于内存泄漏而耗尽资源,程序的状态也可能变得混乱。智能指针可以自动地为你释放这些资源,即使是在异常发生的情况下。
避免常见的错误。忘记调用 delete 是书本中最古老的错误。一个智能指针不关心程序中的控制路径;它只关心在它所指向的对象的生存期结束时删除它。使用智能指针,你不再需要知道何时删除对象。并且,智能指针隐藏了释放资源的细节,因此使用者不需要知道是否要调用delete, 有些特殊的清除函数并不总是删除资源的。
安全和高效的智能指针是程序员的军火库中重要的武器。虽然C++标准库中提供了 std::auto_ptr, 但是它不能完全满足我们对智能指针的需求。例如,auto_ptr不能用作STL容器的元素。
Boost的智能指针类填充了标准所留下来的缺口,webkit中的wtf库是一个轻量级的智能指针实现。
- 我们需要智能指针?
- 何时我们需要智能指针
- 我们需要什么样智能恒温器?
- 使用boost智能指针需要的文件
- 关于智能指针,需要注意的
- C++中为什么需要智能指针
- c++之我们为什么选择使用智能指针
- BuildYourOwnLisp Why we need pointer 为什么我们需要指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- Android开发之旅:环境搭建及HelloWorld
- randnumber_mn.c 生成一个数组,包括k个不重复的整数,并且要求这些整数范围为[m,n),生成的结果中不能包含inum中的数字,size表示inum的长度
- UVa Problem 121 - Pipe Fitters
- PyDev无法导入MySQLdb的问题
- Android ApiDemos详解之App_Activity_Hello World(6)
- 我们需要智能指针?
- 天下无贼(羽泉)
- 《机械系统控制软件:实时系统面向对象设计》读后感
- 使用JQuery 对表格数据上下移动
- php中字符串格式转换
- ubuntu 下eclipse提示背景黑色的修改
- Ogre的官僚主义批判
- 使用Matisse Form编写聊天程序出现的异常处理方案
- 避免当野monkey, 走野路子