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

C++智能指针

当我们用一个指针来构造另一个指针的时候: int main() { SmartPtr sp1(new int()); SmartPtr sp2(sp1); return 0; }   而这部分也有一些C+...(new int(1)); std::auto_ptr sp2(sp1); return 0; }   看到这里,你可能会很惊讶,C++标准库里居然会发生这样的事情,实际上在我第一看到的时候也是很惊讶...+98标准的,而C++11过后,对智能指针进行了大更新,新增了许多实用性指针。...而为什么不会像auto_ptr这样犯糊涂了,这是因为这次有了先锋者,C++委员会一部分人作为先锋者,对C++一些语法做了很多的尝试,最终形成的产物就是boost库,而C++11就是吸取boost库中精华的部分..._ptr; } T* operator->() { return _ptr; } private: T* _ptr; };   虽然我们说weak_ptr不参与资源的管理,实际上在C+

9010

【C++】————智能指针

一,什么是智能指针 在C++中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露。解决这个问题最有效的方法是使用智能指针(smart pointer)。...c++中用的最多的是下面三种智能指针 C++11中提供了三种智能指针,使用这些智能指针时需要引用头文件 std::shared_ptr:共享的智能指针 std::unique_ptr...二,共享的智能指针shared_ptr 首先了解一下基本概念,再看代码,会学的很快 1. shared_ptr的初始化 共享智能指针是指多个智能指针可以同时管理同一块有效的内存,共享智能指针shared_ptr...,通过操作智能指针和操作智能指针管理的内存效果是一样的,可以直接完成数据的读写。...指定删除器 当智能指针管理的内存对应的引用计数变为0的时候,这块内存就会被智能指针析构掉了。

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

    C++智能指针

    delete[] p3; } 2.2 内存泄漏分类 C/C++程序中一般我们关心两种方面的内存泄漏: 堆内存泄漏(Heap leak) 堆内存指的是程序执行中依据须要分配通过malloc / calloc...+11中开始提供更靠谱的unique_ptr unique_ptr的实现原理:简单粗暴的防拷贝,下面简化模拟实现了一份UniquePtr来了解它的原理 // C++11库才更新智能指针实现 // C++...11出来之前,boost搞除了更好用的scoped_ptr/shared_ptr/weak_ptr // C++11将boost库中智能指针精华部分吸收了过来 // C++11->unique_ptr/...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。

    6110

    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.5K30

    智能指针--C++

    ) { cout << "未知异常" << endl; } return 0; } 三、C++标准库智能指针的使用 C++标准库中的智能指针都在这个头文件下面,我们包含就可以是使用了,智能指针有好几种...+11和boost中智能指针的关系 Boost库是为C++语言标准库提供扩展的一些C++程序库的总称,Boost社区建立的初衷之一就是为C++的标准化工作提供可供参考的实现,Boost社区的发起⼈Dawes...本⼈就是C++标准委员会的成员之一。...在Boost库的开发中,Boost社区也在这个方向上取得了丰硕的成果,C++11及之后的新语法 和库有很多都是从Boost中来的。 C++ 98 中产生了第一个智能指针auto_ptr。...C++ TR1,引入了shared_ptr等,不过注意的是TR1并不是标准版。 C++ 11,引入了unique_ptr和shared_ptr和weak_ptr。

    4500

    C++:智能指针

    一、智能指针的使用及原理 1.1 为什么需要智能指针 在学习异常的时候,我们知道了由于异常的反复横跳可能会导致内存泄露的问题,但是对于一些自定类类型来说他在栈帧销毁的时候会去调用对应的析构函数...因此为了解决抛异常之后可能存在的内存泄露的问题,C++提出了智能指针来解决这个问题,他的思想是RAII。下面我们将RAII来理解什么是智能指针。...1.4 auto_ptr 智能指针有自己的发展历史,各个版本产生的结果根本原因就是由于拷贝构造和赋值重载的实现思想不同。 C++98版本的库中就提供了auto_ptr的智能指针。...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。

    11300

    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。

    74140

    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。

    62020

    【C++】C++的内存处理 --- 智能指针

    为了解决这个问题,可以使用智能指针!可以简单的来进行解决! 2 智能指针 2.1 什么是智能指针 智能指针类似lock_guard,是对指针的封装,可以实现在超出生命周期之后自动销毁的功能!...还需要进行一个拷贝构造的特殊处理,否则就会出现对同一片地址析构两次的场景 2.2 C++库中的智能指针 在C++memory库中有以下几种智能指针: 我们来看auto_ptr是如何解决拷贝问题的...这里可以使用仿函数来进行传递,但是在C++11之后使用lambda表达式更加简约直观!...对于C++来说,内存泄漏是很严重的问题!C++没有和JAVA的垃圾回收机制。...C/C++程序中一般我们关心两种方面的内存泄漏: 堆内存泄漏(Heap leak): 堆内存指的是程序执行中依据须要分配通过malloc / calloc / realloc / new等从堆中分配的一块内存

    14310

    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]。

    1K40

    【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都转化为智能指针即可

    16610

    C++智能指针

    C++智能指针 为什么要使用智能指针? C++ Primer>> 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+

    46420

    【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。

    23620

    《跨越平台壁垒:C++ 人工智能模型在移动设备的部署之路》

    然而,如何将 C++实现的人工智能模型成功部署到移动设备上,让智能应用触手可及,成为了众多开发者亟待攻克的关键挑战,也是当下人工智能技术领域备受瞩目的热点话题。...一、C++ 与移动设备部署的重要性与难点 移动设备已经深度融入人们生活的方方面面,从智能手机到平板电脑,其强大的计算能力和便捷的携带性为人工智能应用提供了广阔的施展空间。...将 C++实现的人工智能模型部署到移动设备上,可以充分利用移动设备的本地资源,实现快速响应和离线运行,为用户提供更加流畅、智能的应用体验。 不过,这一过程并非一帆风顺。...在 iOS 平台上,要将 C++人工智能模型部署到移动设备上,需要使用 iOS 的开发工具链,如 Xcode。...六、未来展望 随着移动设备技术的不断发展和人工智能领域的持续创新,C++实现的人工智能模型在移动设备上的部署将迎来更加广阔的前景。

    11210

    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 。

    2K10
    领券