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

C++11智能指针

智能指针等。2、事后查错型。如泄漏检测工具。...上边的SmartPtr还不能将其称为智能指针,因为它还不具有指针的行为。...需要注意的是shared_ptr的线程安全分为两方面: 智能指针对象中引用计数是多个智能指针对象共享的,两个线程中智能指针的引用计数同时++或–,这个操作不是原子的,引用计数原来是1,++了两次,可能还是...所以只能指针中引用计数++、–是需要加锁的,也就是说引用计数的操作是线程安全的。 智能指针管理的对象存放在堆上,两个线程中同时去访问,会导致线程安全问题。...循环引用分析: node1和node2两个智能指针对象指向两个节点,引用计数变成1,我们不需要手动delete。

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

C++11智能指针

+11中的智能指针,unique_ptr来的更直接:直接防止拷贝的方式解决智能指针的拷贝问题,简单而又粗暴,防止智能指针对象拷贝,保证资源不会被多次释放,但是防止拷贝也不是解决问题的好办法: std::...+11的智能指针,通过引用计数的方式解决智能指针的拷贝问题。...因此当智能指针管理的资源不是以new的方式申请到的内存空间时,就需要在构造智能指针对象时传入定制的删除器。...weak_ptr weak_ptr的使用 weak_ptr是C++11中引入的智能指针,weak_ptr不是用来管理资源的释放的,它主要是用来解决shared_ptr的循环引用问题的。...+11与boost中智能指针的关系 C++11和boost中智能指针的关系 C++98中产生了第一个智能指针auto_ptr。

18740

窥见C++11智能指针

导语: C++指针的内存管理相信是大部分C++入门程序员的梦魇,受到Boost的启发,C++11标准推出了智能指针,让我们从指针的内存管理中释放出来,几乎消灭所有new和delete。...既然智能指针如此强大,今天我们来一窥智能指针的原理以及在多线程操作中需要注意的细节。...,可以用p1->get判空做保护 因此在C++11又推出了unique_ptr、shared_ptr、weak_ptr三种智能指针,慢慢取代auto_ptr。...真正的智能指针:shared_ptr auto_ptr和unique_ptr都有或多或少的缺陷,因此C++11还推出了shared_ptr,这也是目前工程内使用最多最广泛的智能指针,他使用引用计数(感觉有参考...}cout << *spa << endl; //20 智能指针原理 看到这里,智能指针的用法基本介绍完了,后面笔者来粗浅地分析一下为什么智能指针可以有效帮我们管理裸指针的生命周期。

1.4K20

初探C++11智能指针

智能指针的由来 在远古时代,C++发明了指针这把双刃剑,既可以让程序员精确地控制堆上每一块内存,也让程序更容易发生crash,大大增加了使用指针的技术门槛。...,可以用p1->get判空做保护 因此在C++11又推出了unique_ptr、shared_ptr、weak_ptr三种智能指针,慢慢取代auto_ptr。...真正的智能指针:shared_ptr auto_ptr和unique_ptr都有或多或少的缺陷,因此C++11还推出了shared_ptr,这也是目前工程内使用最多最广泛的智能指针,他使用引用计数(感觉有参考...,也就是智能指针指针,这听起来就很奇怪,但开发中我们还需要注意,使用shared_ptr的指针指向一个shared_ptr时,引用计数并不会加一,操作shared_ptr的指针很容易就发生野指针异常。...} cout << *spa << endl; //20 智能指针原理 看到这里,智能指针的用法基本介绍完了,后面笔者来粗浅地分析一下为什么智能指针可以有效帮我们管理裸指针的生命周期。

1.2K30

详解C++11智能指针

前言 C++里面的四个智能指针: auto_ptr, unique_ptr,shared_ptr, weak_ptr 其中后三个是C++11支持,并且第一个已经被C++11弃用。...C++11智能指针介绍 智能指针主要用于管理在堆上分配的内存,它将普通的指针封装为一个栈对象。当栈对象的生存周期结束后,会在析构函数中释放掉申请的内存,从而防止内存泄漏。...只有引用计数为0时,智能指针才会自动释放引用的内存资源。对shared_ptr进行初始化时不能将一个普通指针直接赋值给智能指针,因为一个是指针,一个是类。...为什么要使用智能指针 智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。...所以智能指针的作用原理就是在函数结束时自动释放内存空间,不需要手动释放内存空间。 auto_ptr (C++98的方案,C++11已经抛弃)采用所有权模式。

1.5K40

C++11新特性--智能指针

为什么会有智能指针??? C++程序员在编写代码的过程往往都会涉及到堆内存的开辟和释放,使用new和delete关键字。...这无疑要求C++程序员对于对内存的使用要求之高,而智能指针的诞生解放了C++程序员对于堆内存的管理。...智能指针 智能指针是一个类,它将裸指针(带*的指针)进行了封装,实现的指针的自动释放,它的高明之处就在于程序员只需要一次性的设计出一个具有良好功能的智能指针类,用它实例化出来的对象会自动对对象内存的堆资源进行管理...使用智能指针的前提是利用了当栈对象的生存周期结束时,会自动调用析构函数,来进行对对象的销毁。RAII技术。智能指针不能再堆上创建。...设计智能指针的类模板 需要解决的问题: (1)指针可以做的事情,智能指针也必须可以做。需要对*,->运算符进行重载。 (2)*运算符需返回引用,因为*可以连续使用。

25210

c++11新特性之智能指针

很多人谈到c++,说它特别难,可能有一部分就是因为c++的内存管理吧,不像java那样有虚拟机动态的管理内存,在程序运行过程中可能就会出现内存泄漏,然而这种问题其实都可以通过c++11引入的智能指针来解决...c++11引入了三种智能指针: std::shared_ptr std::weak_ptr std::unique_ptr shared_ptr shared_ptr使用了引用计数,每一个shared_ptr...• 通过shared_from_this()返回this指针,不要把this指针作为shared_ptr返回出来,因为this指针本质就是裸指针,通过this返回可能 会导致重复析构,不能把this指针交给智能指针管理...,它不允许其它智能指针共享其内部指针,也不允许unique_ptr的拷贝和赋值。...关于c++11智能指针的使用就介绍到这里,大家有问题可以点此留言 ,我会尽快回复~ 参考资料 https://www.jianshu.com/p/b6ac02d406a0 https://juejin.im

75910

探究C++11智能指针之std::unique_ptr

C++11开始,好多C++程序员慢慢的感受到了C++的魅力所在,似乎难度也越来越小。 C++ 11.png 本文要讲的是C++11引入的智能指针之std::unique_ptr。​...std::unique_ptr系C++11引入的智能指针,拥有资源的唯一所有权,头文件 #include 。...unique_ptr指针指向的堆内存空间的引用计数为 1,如果unique_ptr 指针放弃对所指堆内存空间的所有权,那么该空间会被立即释放回收。 那么,什么时候使用unique_ptr呢?...int>(12345)); std::unique_ptr sp1(std::move(sp)); std::move将sp持有的堆内存转移给sp1后,sp不再持有堆内存的引用,变成一个空的智能指针对象...return 0; } 容器内保存指针示例: std::vector> vec; std::unique_ptr sp(std::make_unique

2K10

【C++】简单实现C++11的三种智能指针

绪 本篇是尝试对C++11的三种智能指针(unique_ptr, shared_ptr, weak_ptr)进行的复现结果, 智能指针的复现在面试中经常考到, 需要好好熟悉...., 所以当需要使用更大的生命周期时还是应该考虑手动管理或者在更大的作用域中使用智能指针 智能指针与垃圾回收的区别 相关讨论: RAII vs....v=JfmTagWcqoE 智能指针的回收通常指的是RAII(资源获取即初始化). 智能指针所采用的引用计数法属于一种垃圾回收技术 智能指针和完整的垃圾回收器旨在解决不同的问题....智能指针的额外开销很小 垃圾回收器由于使用标记和清理手法因此可以很好地处理循环引用的问题, 智能指针如果仅仅使用引用计数的话难以处理. weak_ptr也只是优化了这个问题, 需要程序员进行深入的控制...智能指针则完全由程序员控制 垃圾回收器对于资源的释放有时候有优化, 例如将大批需要释放的资源集中起来一起释放, 这可以提高回收的效率, 智能指针大多只能逐个释放.

1.3K20

智能指针

RAII 在了解智能指针之前,我们需要先要了解RAII,那么什么是RAII呢?...智能指针 上边的SmartPtr类,就是RAII,但是只有管理资源释放的功能,并没有指针解引用和->的操作,不能对管理的资源进行控制,那么我们如何让SmartPtr支持像指针一样的行为呢?...这里我们将引入智能指针的概念,并且简要的模拟四种库的智能指针,理解原理 智能指针的原理如下: RAII特性 重载operator * 和opertaor->,具有像指针一样的行为。...循环引用 问题的引入:我们有个节点类,用shared_ptr会发生什么样的问题,我们来看一下下面 上边说share_ptr的对象不能给Node*,我们可以更改一个Node类,将前后指针改成智能指针。...定制删除器 定制删除器是针对智能指针管理的类型定制专用的删除器,如果没有制删除器可能会出现一些错误。

30420

rust智能指针

智能指针 智能指针虽然也号称指针,但是它是一个复杂的家伙:通过比引用更复杂的数据结构,包含比引用更多的信息,例如元数据,当前长度,最大可用长度等。...智能指针往往是基于结构体实现,它与我们自定义的结构体最大的区别在于它实现了 Deref 和 Drop 特征: Deref 可以让智能指针像引用那样工作,这样你就可以写出同时支持智能指针和引用的代码,例如...,这两个特征可以智能地帮助我们节省使用上的负担:Deref 可以让智能指针像引用那样工作,这样你就可以写出同时支持智能指针和引用的代码,例如 *T。...考虑一下智能指针,*它是一个结构体类型,如果你直接对它进行 myStruct,显然编译器不知道该如何办,因此我们可以为智能指针结构体实现 Deref 特征。...接着,我们又使用 Rc::clone 克隆了一份智能指针 Rc,并将该智能指针的引用计数增加到 2。

1.1K30

Android智能指针

网上已经有很多分析智能指针的文章了,讲得不错的是:Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析。本文尽量从不分析代码的角度,将Android中的智能指针原理讲述清楚。...Android的指针指针比上面说的强大,它分为几种:轻量级智能指针、强智能指针、弱智能指针。...轻量级智能指针: 其实就是最简单最常规的智能指针:构造器中增加计数器,析构器中减少计数器,当计数器为0,释放对象。...强智能指针和弱智能指针: Android中分别为强智能指针和弱智能指针维护了一个计数器。通常我们通过强智能指针使用对象,而弱智能指针对需要提升为强智能指针后才可以使用。...当以弱计数器为参考时:强计数器为0,对象不被释放,假如弱计数器不为0,你还可以通过弱智能指针提升为强智能指针,然后正常使用。当最后弱智能指针为0,对象被释放。

58640

智能指针详解

智能指针的使用 下面是一个原始指针智能指针比较的示例代码 // 原始指针 void rawptr(){ // 使用原始指针 Obj *rawptr = new Obj("raw pointer...智能指针的特点包括: 拥有权管理:智能指针拥有其所指向的对象,负责在适当的时机释放内存。这意味着当智能指针超出作用域或不再需要时,它会自动调用析构函数来释放内存。...异常安全性:智能指针在异常情况下能够保证资源的正确释放。即使发生异常,智能指针也会在其作用域结束时被销毁,并调用析构函数来释放资源。...智能指针封装了指向堆分配对象的原始指针,因此智能指针通常提供直接访问其原始指针的方法。 C++ 标准库智能指针拥有一个用于此目的的get成员函数。...C++11主要支持的智能指针为以下几种: unique_ptr shared_ptr weak_ptr unique_ptr std::unique_ptr是 C++ 标准库提供的智能指针之一

19240

智能指针(一)

或者使用智能指针来完成,包含shared_ptr和unique_ptr两种,前者允许多个指针指向同一个对象(每个shared_ptr都有一个引用计数来计算指向对象的指针个数),而后者则只能由一个指针指向一个对象...shared_ptr 智能指针也是模板的一种,所以创建时需要指出类型,,也支持和指针一样的解引用操作。...p.get()操作 p.get()的设计目的是当需要向不能用智能指针的地方传递一个内置指针时使用。...p.get()的作用是返回一个内置指针,指向智能指针指向的对象,并且返回的指针不能被delete 有几个注意点: 返回的指针不能被delete,因为如果delete就会销毁对象,那么之后智能指针就无法释放已经被释放的对象...auto p=make_shared(1); auto a=p.get() delete a; 返回的指针不能用于初始化另一个智能指针,这样会会有两个独立的智能指针指向同一个对象,并且引用计数都是

81810

智能指针的讲解

1.为什么要智能指针 首先我们分析一段代码: 1、如果p1这里new 抛异常会如何? 2、如果p2这里new 抛异常会如何? 3、如果div调用这里又会抛异常会如何?...需要下一条智能指针来管理才有保证。 采用RAII思想或者智能指针来管理资源。 有些公司内部规范使用内部实现的私有内存管理库。这套库自带内存泄漏检测的功能选项。 出问题了使用内存泄漏工具检测。...如智能指针等 2、事后查错型。如泄漏检测工具 3....我们前面提到的智能指针就是RAII的一种产物 它的思想大概就是: 在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源。...其实上面的一段代码还不算是完整的智能指针,因为智能指针的原理决定了它的特殊性质: 1.

7410
领券