首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++智能指针

1.智能指针的由来 C++中,动态内存的管理是通过一对运算符来完成的,new用于申请内存空间,调用对象构造函数初始化对象并返回指向该对象的指针。...为了更容易且更安全的管理动态内存,C++推出了智能指针(smart pointer)类型来管理动态对象。...智能指针有时需要将其管理的对象的所有权转移给其它的智能指针,使得多个智能指针管理同一个对象,比如C++ STL中的shared_ptr支持多个智能指针管理同一个对象。...C++准标准库Boost中的智能指针,比如boost::scoped_ptr、boost::shared_array、boost:: intrusive_ptr在这里不做研究,有兴趣的读者可以参考:C+...C++中文版(第三版).2011:61-77 [3]C++智能指针简单剖析 [4]shared_ptr基于引用计数智能指针实现 [5] C++智能指针的设计和使用 [6]C++11智能指针之

3.4K30

C++智能指针

delete[] p3; } 2.2内存泄漏分类(简单说明) C/C++程序中一般我们关心两种方面的内存泄漏: ⭐堆内存泄漏(Heap Leak) 堆内存指的是程序执行中依据须要分配通过malloc...3.3 std::auto_ptr auto_ptr是C++98版本的库中提供的智能指针。auto_ptr智能指针的拷贝和赋值操作是权限转移。...+11和boost中智能指针的关系 boost库我们可以看作是C++官方库的先锋队,它为C++官方库开辟道路,让官方库从中吸取经验。...在智能指针方面: 1. C++ 98 中产生了第一个智能指针auto_ptr. 2. C++ boost给出了更实用的scoped_ptr和shared_ptr和weak_ptr. 3....C++ TR1,引入了shared_ptr等。不过注意的是TR1并不是标准版。 4. C++ 11,引入了unique_ptr和shared_ptr和weak_ptr。

71140
您找到你想要的搜索结果了吗?
是的
没有找到

C++智能指针

C++智能指针 零、前言 一、为什么需要智能指针 二、内存泄漏 三、智能指针 1、RAII 2、智能指针的原理 3、std::auto_ptr 4、std::unique_ptr 5、std::shared_ptr...6、std::weak_ptr 7、删除器 8、C++11和boost中智能指针的关系 零、前言 本章主要讲解学习C++智能指针的概念及使用 一、为什么需要智能指针 示例: double Division...}; 注:这里的模拟并不一定就是C++中真真的底层实现 8、C++11和boost中智能指针的关系 C++ 98 中产生了第一个智能指针auto_ptr C++ boost给出了更实用的scoped_ptr...和shared_ptr和weak_ptr C++ TR1,引入了shared_ptr等。...不过注意的是TR1并不是标准版 C++ 11,引入了unique_ptr和shared_ptr和weak_ptr。需要注意的是unique_ptr对应boost的scoped_ptr。

57020

C++智能指针

为了缓解异常所引发的内存泄露问题,C++ 设计出了智能指针。...---- 二、C++ 智能指针 1、智能指针的概念 智能指针本质上是一个类,这个类的成员函数根据其功能被分为两类: RAII:RAII (资源获得即初始化 – Resource Acquisition...2、智能指针发展史 C++ 中的第一个智能指针名为 auto_ptr,由 C++98 提供,但由于 auto_ptr 存在极大的缺陷,同时 C++98 的后一个大版本 – C++11 又发布的很晚,所以...C++ 标准委员会的部分成员发起并创建了 boost 库,其目的是为C++的标准化工作提供可供参考的实现,因此 boost 库又被称为 C++ 库的准标准库。...3、auto_ptr auto_ptr 是 C++ 中的第一个智能指针,它解决智能指针拷贝问题的方式是 管理权转移,即当用当前对象拷贝构造一个新对象时,会将当前对象管理的资源交给新对象,然后将自己的资源置空

15130

C++ 智能指针

转载自:C++ 智能指针详解 简介 由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。...my_memory.reset(); // 释放 my_memory 内部管理的内存 } } 原来 std::auto_ptr 的 release() 函数只是让出内存所有权,这显然也不符合 C+...由于 std::auto_ptr 引发了诸多问题,一些设计并不是非常符合 C++ 编程思想,所以引发了下面 boost 的智能指针,boost 智能指针可以解决如上问题。 让我们继续向下看。...讲完如上 6 种智能指针后,对于一般程序来说 C++ 堆内存管理就够用了,现在有多了一种 boost::intrusive_ptr,这是一种插入式的智能指针,内部不含有引用计数,需要程序员自己加入引用计数...总结 如上讲了这么多智能指针,有必要对这些智能指针做个总结: 1、在可以使用 boost 库的场合下,拒绝使用 std::auto_ptr,因为其不仅不符合 C++ 编程思想,而且极容易出错[2]。

97840

C++智能指针

为什么需要智能指针?...--- 所以C++98版本的库中就提供了auto_ptr的智能指针,提出了 管理权转移的思想 官方文档:auto_ptr ---- 将管理权只给一个对象,剩下一个对象去除管理权 ---- 如果不了解管理权转移的特性...+98和C++11之间 产生了一个 库 boost (准标准库) 在boost中 就把智能指针的问题解决了 boost 中包含 scoped_ptr shared_ptr weak_ptr 体系 C...A,则使对象A指向对象C的资源处 ,同时对象B的引用计数-1,对象C的引用计数+1 ---- 情况2 若将对象A赋值给对象C,则对象C原本指向的引用计数为0,该资源要被释放 代码实现 namespace...---- 使用智能指针就进行释放了 ---- n1和n2作为智能指针对象,而next和prev作为原生指针 智能指针对象是没办法给原生指针的 ---- 将next和prev都转化为智能指针即可

12810

C++智能指针

C++智能指针 为什么要使用智能指针? > p400 虽然使用动态内存有时是必要的,但众所周知,正确地管理动态内存是非常棘手的。...C++98 提供了 auto_ptr模板的解决方案 C++11 增加了 unique_ptr、shared_ptr、weak_ptr (就是一个类模板,里面有析构函数,能够自动释放这个对象开辟的内存。)...auto_ptr C++98的智能指针模板,其定义了管理指针的对象,可以将new获得(直接或间接获得)的地址赋值给这种对象。当对象过期时,其析构函数会用delete来释放内存。...4.C++11 后auto_ptr 已经被“抛弃”,已使用unique_ptr替代! unique_ptr auto_ptr弊端 auto_ptr是用于C++11之前的智能指针。...s3 = NULL; or s3 = nullptr; or s3.reset(); 放弃对象控制权 s3.release();//放弃对象的控制权,返回指针,然后将s3重为空 **<<C+

37920

C++智能指针

关于内存泄漏,我也曾在C++内存管理一文中写过。 为了更好的管理我们申请的空间,C++引入了智能指针。 参考文章: 1.【C++】异常_ 2. ...C++内存管理 二、智能指针 1.RAII RAII ( Resource Acquisition Is Initialization )是一种 利用对象生命周期来控制程序资源 (如内存、文件句柄、...---- 三、标准库中的智能指针 1.std::auto_ptr 参考文献:std::auto_ptr auto_ptr 是C++库中的第一个智能指针,其在面对拷贝构造的解决办法是:转移所有权(当用当前的智能指针对象拷贝出一个新对象时...所以在我们对智能指针中的资源操作的时候,我们也需要手动加锁。 C)shared_ptr中的循环引用问题 虽然shared_ptr相较于以往的智能指针,表现的十分好,但是仍旧是有缺陷的。...为了解决这个问题,C++中引入了weak_ptr。

19220

C++ 智能指针详解

http://blog.csdn.net/xt_xiaotian/article/details/5714477 C++ 智能指针详解 一、简介 由于 C++ 语言没有自动内存回收机制,程序员每次 new...由于 std::auto_ptr 引发了诸多问题,一些设计并不是非常符合 C++ 编程思想,所以引发了下面 boost 的智能指针,boost 智能指针可以解决如上问题。 让我们继续向下看。...讲完如上 6 种智能指针后,对于一般程序来说 C++ 堆内存管理就够用了,现在有多了一种boost::intrusive_ptr,这是一种插入式的智能指针,内部不含有引用计数,需要程序员自己加入引用计数...三、总结 如上讲了这么多智能指针,有必要对这些智能指针做个总结: 1、在可以使用 boost 库的场合下,拒绝使用 std::auto_ptr,因为其不仅不符合 C++ 编程思想,而且极容易出错[2]。...--------------------------------------- [1]参见《effective C++(3rd)》,条款06 。

1.9K10

C++智能指针详解

参考资料:《C++ Primer中文版 第五版》 我们知道除了静态内存和栈内存外,每个程序还有一个内存池,这部分内存被称为自由空间或者堆。...在C++中,动态内存的管理是用一对运算符完成的:new和delete,new:在动态内存中为对象分配一块空间并返回一个指向该对象的指针,delete:指向一个动态独享的指针,销毁对象,并释放与之关联的内存...智能指针的使用方式和普通指针类似,解引用一个智能指针返回它指向的对象,在一个条件判断中使用智能指针就是检测它是不是空。...使用了动态生存期的资源的类: 程序使用动态内存的原因: (1)程序不知道自己需要使用多少对象 (2)程序不知道所需对象的准确类型 (3)程序需要在多个对象间共享数据 直接管理内存 C++定义了两个运算符来分配和释放动态内存...release返回的指针通常被用来初始化另一个智能指针或给另一个智能指针赋值。

69030

C++智能指针简介

1.智能指针的由来 C++中,动态内存的管理是通过一对运算符来完成的,new用于申请内存空间,调用对象构造函数初始化对象并返回指向该对象的指针。...为了更容易且更安全的管理动态内存,C++推出了智能指针(smart pointer)类型来管理动态对象。...智能指针有时需要将其管理的对象的所有权转移给其它的智能指针,使得多个智能指针管理同一个对象,比如C++ STL中的shared_ptr支持多个智能指针管理同一个对象。...4.智能指针的实现模板 智能指针管理对象,本质上是以栈对象来管理堆对象,在《Effective C++》的条款13中称之为资源获取即初始化(RAII,Resource Acquisition Is Initialization...+ Primer(第五版).2013:400-422 [2]Scott Meyers著,侯捷译.Effective C++中文版(第三版).2011:61-77 [3]C++智能指针简单剖析 [4

1.1K30

C++基础 智能指针

智能指针基础原理 智能指针和普通指针的区别在于智能指针实际上是对普通指针加了一层封装机制,这样的一层封装机制的目的是为了使得智能指针可以方便的管理一个对象的生命期,实现内存的自我回收。...这也就是智能指针的基本思想。...C++11智能指针 四种智能指针 C++ STL为我们提供了四种智能指针: auto_ptr( C++98提供,C++11建议弃用) 主要是用来解决**最基本**的资源自动释放问题 unique_ptr...对于特定对象,同一时刻只能有一个智能指针可拥有, 最终只有拥有对象的智能指针的构造函数会删除该对象,auto_ptr和unique_ptr就是采用这种策略 创建智能更高的指针,跟踪引用特定对象的智能指针个数...如果将上述代码中的auto_ptr换为unique_ptr,在程序编译时就会提示错误,因而它可以在编译时将潜在的错误暴露出来: error C2280: 'std::unique_ptr<int,std

57820

C++智能指针学习(一)

好了,废话就不多说,看内容: 一、智能指针的概念: C/C++ 语言最为人所诟病的特性之一就是存在内存泄露问题,因此后来的大多数语言都提供了内置内存分配与释放功能,有的甚至干脆对语言的使用者屏蔽了内存指针这一概念...在 C/C++ 语言中,内存泄露的问题一直困扰着广大的开发者,因此各类库和工具的一直在努力尝试各种方法去检测和避免内存泄露,如 boost,智能指针技术应运而生。...简要的说,智能指针利用了 C++ 的 RAII 机制,在智能指针对象作用域结束后,会自动做内存释放的相关操作,不需要我们再手动去操作内存。...C++中有四种智能指针: 1、auto_ptr 2、unique_ptr 3、shared_ptr 4、week_ptr 其中后三个是 C++11 支持,第一个已经被 C++11 弃用且被 unique_ptr...上面说到c++的新的特性学习,但是在嵌入式领域,c++还不会用太新的版本,但是作为自身学习的话,新的东西,还是要去探索学习的,紧跟技术发展,为此我发现这两个学习c++的网站不错,一个是cplusplus

70020

c++基础 使用智能指针

三个智能指针模板(auto_ptr、unique_ptr和shard_ptr)都定义了类似指针的对象(c++11已将auto_ptr摒弃),可以将new获得(直接或间接) 的地址赋给这种对象。...当智能指针过期时,其析构函数将使用delete来释放内存。因此,如果将new返回的地址赋给 这些对象,将无需记住稍后释放这些内存:在智能指针过期时,这些内存将自动被释放。...使用智能指针必须包含头文件memory文件模板定义。然后使用通常的械板语法来实例化所需类型的指针。...其它两种智能指针使用同样的语法: unique_ptr pdu(new double); shared_ptr pss(new string); 我们可以这么用它 #include...if(error)     throw exception();   str=*ps;   return ; } 智能指针模板位于名称空间std中。

78650

C++智能指针简单剖析

http://blog.csdn.net/lanxuezaipiao/article/details/41603883 导读 最近在补看《C++ Primer Plus》第六版,这的确是本好书,其中关于智能指针的章节解析的非常清晰...C++面试过程中,很多面试官都喜欢问智能指针相关的问题,比如你知道哪些智能指针?shared_ptr的设计原理是什么?如果让你自己设计一个智能指针,你如何完成?等等……。...而且在看开源的C++项目时,也能随处看到智能指针的影子。这说明智能指针不仅是面试官爱问的题材,更是非常有实用价值。 下面是我在看智能指针时所做的笔记,希望能够解决你对智能指针的一些困扰。...目录 智能指针背后的设计思想 C++智能指针简单介绍 为什么摒弃auto_ptr? unique_ptr为何优于auto_ptr? 如何选择智能指针? 正文 1....C++智能指针简单介绍 STL一共给我们提供了四种智能指针:auto_ptr、unique_ptr、shared_ptr和weak_ptr(本文章暂不讨论)。

85210

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券