auto_ptr已经废弃。原因是它行为上是"排它性"指针,但又允许编译器实现拷贝操作,拷贝后的右值会被赋空。即将“传递”语义掩盖在“拷贝”动作之下。即a=b时,作为右值的b的物理指针会是NULL。会造成使用它的容器混乱。这是典型的设计缺陷。既然是“传递”语义,就不应以“拷贝"形式出现。另一方面,它对于数组的指针也支持不好,无法完成new []和delete []的配对。 unique_p
上一篇笔记提到C++的智能指针,本节重点写一下智能指针的应用场景和使用中的坑智能指针的背景C++中比较头疼的是内存泄露问题,如果使用new动态申请内存,需要时刻记得delete回收内存,避免发生内存泄露。对于分支很多的代码来讲,在多个分支进行内存释放很容易产生遗漏,排查代码非常浪费时间。为了避免这种情况,C++采用智能指针的方式进行内存管理,智能指针本身就是一个类,在类的对象超出作用域范围时,会自
什么是智能指针,何时应使用?#1楼在计算机科学中,智能指针是一种抽象数据类型,它在提供其他功能(例如自动垃圾收集或边界检查)的同时模拟指针。 这些附加功能旨在减少因滥用指针而导致的错误,同时保持效率。 智能指针通常会跟踪指向它们的对象,以进行内存管理。 指针的滥用是错误的主要来源:必须由使用指针编写的程序执行常量分配,释放和引用,这很可能会发生一些内存泄漏。 智能指针试图通过使资源自动分配来防止内
Smart Pointers - What, Why, Which?  http://ootips.org/yonat/4dev/smart-pointers.htmlauto_ptr  C++98中,智能指针通过一个模板类型auto_ptr实现,缺点:拷贝时返回一个左值,不能调用delete[](只能针对单个对象使用,不能针对数组使用),所以在C++11标志中被废弃了。  a
转载 2023-06-07 14:46:19
145阅读
  C++11标准虽然将 weak_ptr 定位为智能指针的一种,但该类型指针通常不单独使用(没有实际用处),只能和 shared_ptr 类型指针搭配使用。甚至于,我们可以将 weak_ptr 类型指针视为 shared_ptr 指针的一种辅助工具,借助 weak_ptr 类型指针, 我们可以获取 shared_ptr 指针的一些状态信息,比如有多少指向相同的 shared_ptr 指针、sha
转载 2023-06-07 14:47:12
134阅读
前言对智能指针进行学习,并在下一篇博客中实现简单的智能指针智能指针简介C++中使用对内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理;程序员自己管理对内存可以提高程序的效率,但是整体来说对内存的管理是麻烦的;据此引入了智能指针的概念: 智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。所以智能指针的作用原理就是在函数结束时自动释放内存空间
智能指针指针 (pointer)是一个包含内存地址的变量的通用概念。这个地址引用,或 “指向”(points at)一些其他数据。Rust 中最常见的指针是引用(reference)。引用以 & 符号为标志并借用了它们所指向的值。除了引用数据没有任何其他特殊功能。它们也没有任何额外开销,所以应用得最多。智能指针(smart pointers)是一类数据结构,它们的表现类似指针,但是也拥有额
转载 2023-07-05 21:47:54
284阅读
一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解常见的智能指针的用法。包括:std::auto_ptr、boost::scoped_ptr、boost::shared_pt
转载 2023-06-07 14:46:54
651阅读
文章目录智能指针unique_ptrshared_ptrweak_ptr 智能指针unique_ptrunique_ptr持有对对象的独有权,同一时刻只能有一个unique_ptr指向对象(通过禁止拷贝语义,只有移动语义来实现)生命周期:从创建开始,直到离开作用域离开作用域时,若其指向对象,则将其所指对象销毁(默认使用delete操作符,用户可指定其他操作)unique_ptr实际是类模板,只不
unique_ptr介绍:unique_ptr是一种定义在<memory>中的智能指针(smart pointer)。它持有对对象的独有权unique是独特的、唯一的意思,故名思议,unique_ptr可以“独占”地拥有它所指向的对象,它提供一种严格意义上的所有权。这一点和我们前面介绍的shared_ptr类型指针有很大的不同:shared_ptr允许多个指针指向同一对象,而uniqu
1.智能指针的作用C++程序设计中需要频繁地动态分配堆内存,堆内存的申请和释放都由程序员管理。程序员管理堆内存提高了程序的效率,但是整体来说堆内存的管理非常麻烦,且容易造成动态分配的堆内存没有正确释放或无法释放,导致资源浪费,程序运行速度变慢等问题。为了解决这些问题C++11提出了智能指针的概念,方便管理内存。使用普通指针容易造成内存泄漏、二次释放、程序发生异常时内存泄漏等问题,使用智能指针可以更
以下实现没有考虑线程安全的问题。智能指针:它的一种通用实现方法是采用引用计数的方法。智能指针将一个计数器与类指向的对象相关联,引用计数跟踪共有多少个类对象共享同一指针。    每次创建类的新对象时,初始化指针并将引用计数置为1;    当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数;  
C++11 中推出了三种智能指针,unique_ptr、shared_ptr 和 weak_ptr,同时也将 auto_ptr 置为废弃 (deprecated)。但是在实际的使用过程中,很多人都会有这样的问题:不知道三种智能指针的具体使用场景无脑只使用 shared_ptr认为应该禁用 raw pointer(裸指针,即 Widget * 这种形式),全部使用智能指针本文将从这几方面讲解智能指针
为什么智能指针还需要 Release呢,智能指针不是不需要进行管理引用计数了吗,为什么还需要程序员来release? 原因是,智能指针对象在对象销毁时释放所指向的接口,但如果没有在函数退出前,你销毁了com库,那就需要提前来Release它。如: ::CoInitialize( NULL );  //如果在这里初始化,则要注意智能指针的释放 CCo
1.9 再论shared_ptr 的线程安全虽然我们借shared_ptr 来实现线程安全的对象释放,但是shared_ptr 本身不是100% 线程安全的。它的引用计数本身是安全且无锁的,但对象的读写则不是,因为shared_ptr 有两个数据成员,读写操作不能原子化。根据文档11,shared_ptr 的线程安全级别和内建类型、标准库容器、std::string 一样,即:一个shared_p
转自:http://developer.51cto.com/art/201001/180894.htmAndroid手机操作系统既然是开源的操作系统。那么在具体的文件夹中就会存放着各种相关功能的开源代码。我们在使用的时候可以根据这些源代码进行相应的修改就能轻松的完成我们所需的功能。在这里大家就一起来看看Android智能指针的相关源码解读以及应用方法。在Android的源代码中,经常会看到形如:s
一、前言今天我们开启Android系统篇的文章了,其实一直想弄,只是之前一直没有太多深入的了解,最近又把这块拿出来好好看了一下,所以想从新梳理一下,来看看Android中的这块知识,首先我们今天来看一下:Android中的智能指针的概念,为什么说先看一下智能指针这个知识呢?因为我们在看Android源码的时候,会发现几乎好多地方都用到了这个东东,所以我们在介绍后面的知识点,先来看看这个吧。二、问题
浅拷贝(shallow copy)与深拷贝(deep copy)对于值拷贝的处理相同,都是创建新对象,但对于引用拷贝的处理不同,深拷贝将会重新创建新对象,返回新对象的引用字。浅拷贝不会创建新引用类型。怎么判断一个类的赋值构造函数的方法:根据类的实现1。如果它有一个用原生指针指针实现的对象引用,或是用boost::shared_ptr等引用分享所有权的智能指针实现的对象引用,则这个拷贝是浅拷贝2。如
1. 智能指针概念智能指针是基于RAII机制实现的类(模板),具有指针的行为(重载了operator*与operator->操作符),可以“智能”地销毁其所指对象。C++11中有unique_ptr、shared_ptr与weak_ptr等智能指针,可以对动态资源进行管理2. unique_ptr概念unique_ptr“唯一”拥有其所指对象,同一时刻只能有一个unique_ptr指向给定对
上一节对C++11标准中的智能指针shared_ptr做了入门级的介绍,已经明白shared_ptr的基本用法了。不过有一点还值得深思——与 shared_ptr 对象绑定的指针管理的内存五花八门,在这些内存被废弃时,shared_ptr 真的能够万无一失的恰到好处地释放掉这些内存吗? shared_ptr 真的能够万无一失的恰到好处地释放掉这些内存吗? shared_ptr 的默认“d
  • 1
  • 2
  • 3
  • 4
  • 5