`
jiagou
  • 浏览: 2529503 次
文章分类
社区版块
存档分类
最新评论

我们需要智能指针?

 
阅读更多


有三种典型的情况适合使用智能指针:

  • 资源所有权的共享

  • 要写异常安全的代码时

  • 避免常见的错误,如资源泄漏

共享所有权是指两个或多个对象需要同时使用第三个对象的情况。这第三个对象应该如何(或者说何时)被释放?为了确保释放的时机是正确的,每个使用这个共享资源的对象必须互相知道对方,才能准确掌握资源的释放时间。从设计或维护的观点来看,这种耦合是不可行的。更好的方法是让这些资源所有者将资源的生存期管理责任委派给一个智能指针。当没有共享者存在时,智能指针就可以安全地释放这个资源了。

异常安全,简单地说就是在异常抛出时没有资源泄漏并保证程序状态的一致性。如果一个对象是动态分配的,当异常抛出时它不会被删除。由于栈展开以及指针离开作用域,资源可以会泄漏直至程序结束(即使是程序结束时的资源回收也不是语言所保证的)。不仅可能程序会由于内存泄漏而耗尽资源,程序的状态也可能变得混乱。智能指针可以自动地为你释放这些资源,即使是在异常发生的情况下。

避免常见的错误。忘记调用 delete 是书本中最古老的错误。一个智能指针不关心程序中的控制路径;它只关心在它所指向的对象的生存期结束时删除它。使用智能指针,你不再需要知道何时删除对象。并且,智能指针隐藏了释放资源的细节,因此使用者不需要知道是否要调用 delete, 有些特殊的清除函数并不总是删除资源的。

安全和高效的智能指针是程序员的库中重要的武器。虽然C++标准库中提供了 std::auto_ptr, 但是它不能完全满足我们对智能指针的需求。例如,auto_ptr不能用作STL容器的元素。


Boost的智能指针类填充了标准所留下来的缺口,webkit中的wtf库是一个轻量级的智能指针实现。

分享到:
评论

相关推荐

    智能指针的理解 和 简单实现

    为什么需要智能指针?因为c++的内存管理一直是个令人头疼的问题。 假如我们有如下person对象:每个person有自己的名字,并且可以告诉大家他叫什么名字 http://blog.csdn.net/qq_17242957/article/details/52404271

    c++智能指针最全知识点即面试题目总结

    对于需要面试C++相关岗位的文章,看完这篇文章,如果面试官再问你智能指针,我敢肯定,你一定可以侃侃而谈了~智能指针的面试题,只看这一篇就够了!相信看完这篇文章,妈妈再也不用担心面试官考我智能指针的问题啦...

    C++智能指针测试代码

    C++ 7种智能指针测试代码

    c++智能指针的实现

    智能指针是用来实现指针指向的对象的共享的。其实现的基本思想: 每次创建类的新对象时,初始化指针并将引用计数置为1; 当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数; 对一个...

    C++智能指针实现

    智能指针是存储指向动态分配(堆)对象指针的类, 用于生存期控制, 能够确保自动正确的销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的...

    Android智能指针使用方法介绍

    Android智能指针使用方法介绍 Android智能指针使用方法介绍

    smartptr——基于自动引用计数的智能指针

    它可以接管任意类型的指针,所以你只需要放心大胆的new出任意对象,然后用智能指针去接管它,而不用担心在什么地方去delete,这个对象会最后一个接管它的智能指针释放它或者被销毁时而被delete;如果贪图方便,你...

    智能指针--真正的安全的指针

    智能指针--真正的安全的指针 使用智能指针可以避免不必要的损失,他的->和*操作绝对安全的,他有类似java的垃圾回收机制

    c++智能指针介绍的PPT

    讲解的很清楚,将智能指针的精华所在详细说明,增加理解智能指针。

    智能指针最全资料-5篇经典讲义

    智能指针最全资料-5篇经典讲义,详细介绍了智能指针原理,boost库中的智能指针,以及VC中的智能指针。

    C++智能指针实现(不用再担心你的内存泄露)

    代码量,2.5KB,指针共享操作,自动在最后一个智能指针销毁时delete,不再产生内存泄露。内含简单使用范例。不支持管理数组。设有Debug版本的断言,确保智能空指针不被使用。 /* 智能指针类 不能用于数组,指针指向...

    c++智能指针的创建

    c++智能指针的创建 c及c++中的指针是很麻烦的 所以现在有很多技巧去减少问题的出现。 欢迎大家给出意见。

    C语言智能指针

    智能指针 C

    C++智能指针(含内存计数)

    C++智能指针(含内存计数) 完美解决内存泄漏问题。 使用智能指针就像使用指针自己一样方便

    Qt源码剖析-智能指针.pdf

    Qt源码剖析-智能指针 ⽬录 智能指针是什么? 智能指针是什么? 1. 智能指针是使⽤RAII技术(惯⽤⼿法)对裸指针进⾏封装、隔离、管理。 2. 把堆对象转移为栈对象。 为什么使⽤ 为什么使⽤QT智能 智能(smart)指针? ...

    智能指针与引用计数详解

    该demo主要展现智能指针和引用计数的实现过程,总共两个类,一个智能指针类,一个引用计数类,另外附一份执行步骤资料

    c++句柄,智能指针 指针间的区别

    c++句柄,智能指针 指针间的区别,初学者可以下来了解了解

    C++_智能指针详解

    C++ 智能指针详解 std::auto_ptr

    智能指针(新版)

    智能指针(新版)

    Android系统智能指针

    在计算机系统中,资源是数量有限且对系统正常运行具有一定作用的元素。...不过系统为我们提供了智能指针,避免出现上述问题,本文将系统地分析Android系统智能指针(轻量级指针、强指针和弱指针)的实现原理。

Global site tag (gtag.js) - Google Analytics