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

C++智能指针

1.智能指针的由来 C++中,动态内存的管理是通过一对运算符来完成的,new用于申请内存空间,调用对象构造函数初始化对象并返回指向该对象的指针。...为了更容易且更安全的管理动态内存,C++推出了智能指针(smart pointer)类型来管理动态对象。...智能指针有时需要将其管理的对象的所有权转移给其它的智能指针,使得多个智能指针管理同一个对象,比如C++ STL中的shared_ptr支持多个智能指针管理同一个对象。...7.如何选择智能指针? 在掌握了上面提到的C++ STL中的四种智能指针后,大家可能会想另一个问题:在实际应用中,应使用哪种智能指针呢? 下面给出几个使用指南。...C++中文版(第三版).2011:61-77 [3]C++智能指针简单剖析 [4]shared_ptr基于引用计数智能指针实现 [5] C++中智能指针的设计和使用 [6]C++11智能指针

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

C++】智能指针

为什么需要智能指针?..._ptr指针 在构造函数时,将指针保存起来 在析构函数时,将指针释放 将申请的资源,交给智能指针对象去管理 (通过这个指针 去构造一个智能指针对象,这个对象会把指针保留起来) ---- 创建对象时,...--- 所以C++98版本的库中就提供了auto_ptr的智能指针,提出了 管理权转移的思想 官方文档:auto_ptr ---- 将管理权只给一个对象,剩下一个对象去除管理权 ---- 如果不了解管理权转移的特性...+98和C++11之间 产生了一个 库 boost (准标准库) 在boost中 就把智能指针的问题解决了 boost 中包含 scoped_ptr shared_ptr weak_ptr 体系 C...---- 使用智能指针就进行释放了 ---- n1和n2作为智能指针对象,而next和prev作为原生指针 智能指针对象是没办法给原生指针的 ---- 将next和prev都转化为智能指针即可

14610

C++】智能指针

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

20820

C++ 智能指针

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

99340

C++智能指针

C++智能指针 为什么要使用智能指针? > p400 虽然使用动态内存有时是必要的,但众所周知,正确地管理动态内存是非常棘手的。...auto_ptr C++98的智能指针模板,其定义了管理指针的对象,可以将new获得(直接或间接获得)的地址赋值给这种对象。当对象过期时,其析构函数会用delete来释放内存。...不会自动释放指针指针。 3.除非自己知道后果,不要把auto_ptr 智能指针赋值给同类型的另外一个智能指针,解释如下。...4.C++11 后auto_ptr 已经被“抛弃”,已使用unique_ptr替代! unique_ptr auto_ptr弊端 auto_ptr是用于C++11之前的智能指针。...禁止用任何类型智能指针get 函数返回的指针去初始化另外一个智能指针

41620

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...如智能指针等 2、事后查错型。...的智能指针 auto_ptr的实现原理:管理权转移的思想,即当拷贝和赋值时将智能指针管理的内存地址进行转移,也就是一份空间内存只有一个智能指针进行管理 示例: class Date { public:...}; 注:这里的模拟并不一定就是C++中真真的底层实现 8、C++11和boost中智能指针的关系 C++ 98 中产生了第一个智能指针auto_ptr C++ boost给出了更实用的scoped_ptr

59220

C++】智能指针

为了缓解异常所引发的内存泄露问题,C++ 设计出了智能指针。...---- 二、C++ 智能指针 1、智能指针的概念 智能指针本质上是一个类,这个类的成员函数根据其功能被分为两类: RAII:RAII (资源获得即初始化 – Resource Acquisition...智能指针存在的问题 智能指针虽然能够很好的管理资源,但是智能指针的拷贝与赋值是一个很大的问题,它涉及到资源的管理权问题 – 由谁管理、由一个单独管理还是多个共同管理,我们下文学习到的几种智能指针都是围绕这个问题展开的...2、智能指针发展史 C++ 中的第一个智能指针名为 auto_ptr,由 C++98 提供,但由于 auto_ptr 存在极大的缺陷,同时 C++98 的后一个大版本 – C++11 又发布的很晚,所以...3、auto_ptr auto_ptr 是 C++ 中的第一个智能指针,它解决智能指针拷贝问题的方式是 管理权转移,即当用当前对象拷贝构造一个新对象时,会将当前对象管理的资源交给新对象,然后将自己的资源置空

17530

C++11智能指针

为了带来指针更好的使用体验,C++中引入了智能指针的概念,其实质就是将指针的一些操作封装成类,程序员通过使用熟悉的指针运算符(-> 和 *)访问封装指针,该指针类通过运算符重载返回封装的原始指针。...C++ 智能指针思路类似于C#等语言中创建对象的过程:创建对象后让系统负责在正确的时间将其删除。 不同之处在于,C++中没有单独的在后台运行的垃圾回收器。...C++智能指针是在 标头文件中的 std 命名空间中定义的。...C++11中主要有两种类型的智能指针: (1) shared_ptr代表的是“共享所有权”(shared ownership)的指针。...智能指针的使用和普通指针类似,但是需要记住智能指针不能使用delete关键字显示释放空间。

87020

C++】智能指针详解

参考资料:《C++ Primer中文版 第五版》 我们知道除了静态内存和栈内存外,每个程序还有一个内存池,这部分内存被称为自由空间或者堆。...在C++中,动态内存的管理是用一对运算符完成的:new和delete,new:在动态内存中为对象分配一块空间并返回一个指向该对象的指针,delete:指向一个动态独享的指针,销毁对象,并释放与之关联的内存...为了更加容易(更加安全)的使用动态内存,引入了智能指针的概念。智能指针的行为类似常规指针,重要的区别是它负责自动释放所指向的对象。...智能指针的使用方式和普通指针类似,解引用一个智能指针返回它指向的对象,在一个条件判断中使用智能指针就是检测它是不是空。...release返回的指针通常被用来初始化另一个智能指针或给另一个智能指针赋值。

82630

27.C++- 智能指针

智能指针C++库中最重要的类模板之一 智能指针实际上是将指针封装在一个类里,通过对象来管理指针....STL中的智能指针auto_ptr 头文件: 生命周期结束时,自动摧毁指向的内存空间 不能指向堆数组(因为auto_ptr的析构函数删除指针用的是delete,而不是delete[])...(因为多个指向相同地址的智能指针调用析构函数时,会出现bug) 当auto_ptr被拷贝或赋值后,则自身的指针指向的地址会被抢占,比如:   auto_ptr p1(new int(1));...STL中的智能指针shared_ptr(需要C++11支持) 带有引用计数机制,支持多个指针对象指向同一片内存(实现共享) 提供swap()成员函数,用来交换两个相同类型的对象,比如:   shared_ptr...STL中的其它智能指针(在后面学习到,再来深入描述) -weak_ptr 配合shared_ptr而引入的一种智能指针 -unique_ptr 只能一个指针对象指向一片内存空间(和auto_ptr类似)

847100

C++基础 智能指针

智能指针基础原理 智能指针和普通指针的区别在于智能指针实际上是对普通指针加了一层封装机制,这样的一层封装机制的目的是为了使得智能指针可以方便的管理一个对象的生命期,实现内存的自我回收。...这也就是智能指针的基本思想。...C++11智能指针 四种智能指针 C++ STL为我们提供了四种智能指针: auto_ptr( C++98提供,C++11建议弃用) 主要是用来解决**最基本**的资源自动释放问题 unique_ptr...对于特定对象,同一时刻只能有一个智能指针可拥有, 最终只有拥有对象的智能指针的构造函数会删除该对象,auto_ptr和unique_ptr就是采用这种策略 创建智能更高的指针,跟踪引用特定对象的智能指针个数...这样,所有权转让给接受返回值的unique_ptr,而该智能指针将负责调用delete。

60220

C++11】智能指针

单纯的浅拷贝会导致空间多次释放,因为根据智能指针解决卡搜被问题方式不同,所以有很多版本的智能指针 ---- 三、C++中的智能指针 auto_ptr auto_ptr的使用 auto_ptr让管理权限进行了转移...,这是一个比较坑的地方,我们需要多加注意 auto_ptr是C++98的,通过管理权转移的方式解决智能指针拷贝问题,保证了一个资源只有一个对象对其进行管理,这时候一个资源就不会被多个释放: int main...+11的智能指针,通过引用计数的方式解决智能指针的拷贝问题。...weak_ptr weak_ptr的使用 weak_ptr是C++11中引入的智能指针,weak_ptr不是用来管理资源的释放的,它主要是用来解决shared_ptr的循环引用问题的。...+11与boost中智能指针的关系 C++11和boost中智能指针的关系 C++98中产生了第一个智能指针auto_ptr。

20240

C++11智能指针

智能指针等。2、事后查错型。如泄漏检测工具。...上边的SmartPtr还不能将其称为智能指针,因为它还不具有指针的行为。...3.3 std::auto_ptr C++98版本的库中就提供了auto_ptr的智能指针。下面演示的auto_ptr的使用及问题。...需要注意的是shared_ptr的线程安全分为两方面: 智能指针对象中引用计数是多个智能指针对象共享的,两个线程中智能指针的引用计数同时++或–,这个操作不是原子的,引用计数原来是1,++了两次,可能还是...所以只能指针中引用计数++、–是需要加锁的,也就是说引用计数的操作是线程安全的。 智能指针管理的对象存放在堆上,两个线程中同时去访问,会导致线程安全问题。

55320

C++智能指针详解

智能指针初识 1.1 什么是智能指针 智能指针不是指针,是一个管理指针的类,用来存储指向动态分配对象的指针,负责自动释放动态分配的对象,防止堆内存泄漏和空悬指针等等问题。...1.2 智能指针历史历程 C++ 98 中产生了第一个智能指针auto_ptr。...智能指针的众多版本 C++中存在4种智能指针:auto_ptr,unquie_ptr,shared_ptr,weak_ptr,他们各有优缺点,以及对应的实用场景。...unique_ptr是C++11中的智能指针,unique_ptr来的更直接:直接防止拷贝的方式解决智能指针的拷贝问题,简单而又粗暴,防止智能指针对象拷贝,保证资源不会被多次释放,但是防止拷贝也不是解决问题的好办法...3.3 shared_ptr 3.3.1 基础实现 shared_ptr是C++11的智能指针,通过引用计数的方式解决智能指针的拷贝问题。

9810

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]。...5、最后一点,也是要求最苛刻一点:在你的代码中,不要出现 delete 关键字(或 C 语言的free 函数),因为可以用智能指针去管理。

1.9K10
领券