`

C++智能指针的简介

    博客分类:
  • C++
阅读更多

      内存泄露是C++程序员都头疼的大问题。C++缺乏像JAVA、C#一样,拥有GC这么一项有利的武器,它将内存管理的部分权限交给了程序员。虽然GC的存在节约了开发、排错的时间与成本,但是C++为了追求运行速度而20年来坚决不予补充进其标准。(题外话:C++通过加大开发难度去换取执行速度的做法,在现在看来不知是否能给与正面的评价,还是留给将来再说吧。)

  从此,在堆上申请了内存忘了释放、所造成的内存泄露的问题就一直困扰着C++程序员。也许为了稍许弥补没有垃圾回收器所造成的开发门槛高,各大厂商开发的C++库中都像COM学习引入智能指针试图解决部分目前存在的问题。

  智能指针是存储指向动态分配(堆)对象指针的类, 用于生存期控制, 能够确保自动正确的销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针。每次创建类的新对象时,初始化指针并将引用计数置为1;当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数;对一个对象进行赋值时,赋值操作符减少左操作数所指对象的引用计数(如果引用计数为减至0,则删除对象),并增加右操作数所指对象的引用计数;调用析构函数时,构造函数减少引用计数(如果引用计数减至0,则删除基础对象)。

  说到智能指针,我们一定要看看标准C++库提供的“搞笑的”智能指针:auto_ptr。

  标准库中提供了C++程序的基本设施。虽然C++标准库随着C++标准折腾了许多年,直到标准的出台才正式定型,网上评论C++标准库时都说:“在标准库的实现上却很令人欣慰得看到多种实现,并且已被实践证明为有工业级别强度的佳作。”但目前的标准C++中,只有一种独苗智能指针:std::auto_ptr。

  auto_ptr指针是一个RAII对象,它初始化时获得资源,析构时自动释放资源(生命期结束).它的缺点数不胜数:
1、auto_ptr要求一个对象只能有一个拥有者,严禁一物二主
2、缺少对引用数和数组的支持。
3、不可将auto_ptr对象作为STL容器的元素。C++标准明确禁止这样做,否则可能会碰到不可预见的结果。(这一条晕死一大片)。
4、auto_ptr在被复制的时候会传输所有权

反正由此可见:标准库的智能指针就是无甚大用。

    在这样的情况下,C++标准委员会自然需要考虑引入新的智能指针。目前由C++标准委员会库工作组发起的Boost 组织开发了Boost系列智能指针。

  在Boost中的智能指针有五种: scoped_ptr,scoped_array,shared_ptr,shared_array,weak_ptr.

前4种完全是针对标准库中的auto_ptr提出解决方案,如:scope_ptr是针对“auto_ptr在被复制的时候会传输所有权”这一弱点提出的。最后一种没见过,看名字像是弱引用智能指针,我怀疑是不是类似于JAVA中弱引用一样,有待进一步学习。

分享到:
评论

相关推荐

    c++智能指针的创建

    C++智能指针的创建 C++中的指针是很麻烦的,难以管理和释放内存。为了减少问题的出现,现在有很多技巧去减少问题的出现。智能指针是其中一种解决方案。 智能指针是一种特殊的类,它可以模拟指针的行为,但同时也...

    C++智能指针测试代码

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

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

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

    c++智能指针的实现

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

    C++智能指针及容器测试用例

    在C++编程中,智能指针和容器是两个非常重要的概念,它们极大地提高了代码的效率和安全性。本文将深入探讨这两个主题,并结合`CppTest`测试框架,展示如何编写测试用例来验证其正确性。 首先,让我们了解智能指针。...

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

    在C++编程中,智能指针是一种特殊类型的对象,它表现得像常规指针,但自动管理所指向的对象的生命周期。智能指针的核心目标是防止内存泄漏,这是C++编程中一个常见的问题,尤其是在处理动态分配的内存时。内存泄漏指...

    C++智能指针实现

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

    C++智能指针-unique-ptr智能指针详解.pdf

    《C++智能指针——unique_ptr智能指针详解》 智能指针是C++中用于自动管理动态分配内存的一种工具,它可以确保在适当的时候自动释放内存,从而避免内存泄漏的问题。其中,`unique_ptr`是一种特殊的智能指针,它拥有...

    c++智能指针介绍的PPT

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

    C++智能指针 学习手册

    C++ 智能指针C++ 智能指针C++ 智能指针

    C++智能指针:shared-ptr用法详解.pdf

    **C++智能指针shared_ptr详解** C++11引入了一种新的智能指针类型——`shared_ptr`,用于管理动态分配的对象。`shared_ptr`是C++标准库中的一个关键组件,它解决了传统裸指针可能导致的内存泄漏问题。通过使用`...

    C++智能指针详解abc

    C++智能指针详解 标题解释 "C++智能指针详解abc"这一标题表明,本文将详细介绍C++中的智能指针机制,包括其概述、原理、使用方法和结论等方面。 描述解释 "C++智能指针详解abc"这一描述表明,本文将对C++中的智能...

    C++线程安全问题及解决方法,C++智能指针

    对于C++智能指针作出了简要介绍。同时整理了相关的例子帮助理解。适用人群:有一定的编程基础,工作1-3年的研发人员。能学到什么:了解C++线程安全问题的原因,以及掌握解决线程安全问题的方法。同时能够掌握一下锁...

    c++ 复制控制和智能指针

    6. 智能指针:智能指针是C++标准库提供的一种对象,它封装了一个原始指针,并自动管理底层资源的生命周期。例如,`std::unique_ptr`保证了对资源的唯一所有权,而`std::shared_ptr`则实现了引用计数,多个智能指针...

    C++ 智能指针深入解析

    C++中的智能指针是一种自动管理内存的对象,它们充当原始指针的角色,但同时也负责对象的生命周期管理,以防止内存泄漏和垂悬指针的问题。智能指针的出现主要是为了弥补C++中手动内存管理的缺陷,它借鉴了Java等语言...

    C++智能指针

    C++ 中推出了强大的智能指针smart_ptr ,本文具体说说 shared_ptr 和 weak_ptr ,特别是 enable_shared_from_this 和 shared_from_this

    C++ 智能指针

    C++ 智能指针 C++ 智能指针是一种特殊的指针,它可以自动管理动态分配的内存,避免了手动释放内存带来的问题。智能指针的实现是通过模板类 auto_ptr 来实现的。 auto_ptr 类模板的构造函数 ----------------------...

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

    "c++句柄、智能指针和指针的区别" 在C++编程中,句柄、智能指针和指针是三个相关但不同的概念。理解它们之间的区别对于初学者来说非常重要。 首先,让我们来讨论指针和句柄的区别。指针是指向物理内存地址的指针...

Global site tag (gtag.js) - Google Analytics