智能指针指针 (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阅读
# Android 智能指针 sp 实现方法 ## 流程图 ```mermaid sequenceDiagram 小白 ->> 经验丰富的开发者: 请求帮助实现 Android 智能指针 sp 经验丰富的开发者-->>小白: 好的,让我来教你 Note right of 经验丰富的开发者: 步骤如下: 经验丰富的开发者->>小白: 创建一个新的类 MyShare
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
浅拷贝(shallow copy)与深拷贝(deep copy)对于值拷贝的处理相同,都是创建新对象,但对于引用拷贝的处理不同,深拷贝将会重新创建新对象,返回新对象的引用字。浅拷贝不会创建新引用类型。怎么判断一个类的赋值构造函数的方法:根据类的实现1。如果它有一个用原生指针指针实现的对象引用,或是用boost::shared_ptr等引用分享所有权的智能指针实现的对象引用,则这个拷贝是浅拷贝2。如
第一步:针对单独类型的模板为了完成智能指针首先第一步的想法。class shape_wrapper { public: explicit shape_wrapper( shape* ptr = nullptr) : ptr_(ptr) {} ~shape_wrapper() { delete ptr_; } shape* get() const { re
转载 10月前
194阅读
1、简介  COM接口指针很危险,因为使用过程中需要每一个使用者都要严格并且正确的AddRef和Release,一旦出现问题,就会造成对象不能被正常释放,或者对象被重复删除,造成程序崩溃。所以使用COM接口,必须小心翼翼才行。但即使所有的代码中,都正确的AddRef和Release,也不一定能保证万无一失,在AddRef和Release中间的函数可能抛出异常,此时就没有执行到Release了。CC
转载 6月前
84阅读
C++智能指针 weak_ptr   weak_ptr 是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象. 进行该对象的内存管理的是那个强引用的 shared_ptr. weak_ptr只是提供了对管理对象的一个访问手段.   weak_ptr 设计的目的是为配合 shared_ptr 而引入的一种智能指针来协助 shared_ptr 工作, 它只可以从一
研究Android的时候,经常会遇到sp、wp的东西,网上一搜,原来是android封装了c++中对象回收机制。说明:1. 如果一个类想使用智能指针,那么必须满足下面两个条件: a. 该类是虚基类RefBase的子类或间接子类 b. 该类必须定义虚构造函数。如virtual ~MyClass();
转载 2016-08-15 14:50:00
623阅读
2评论
一直纠结于智能指针shared_ptr的引用计数如何实现。此前看C++ primer不太注意,今天再次翻到这一知识点,再细看一遍,受益非浅呀。原来引用计数的实现也不过如此。1、定义行为像指针的类这里为避免同名,且只强调引用计数的实现,自定义了一个HasPtr类,其中最大特点是引入引用计数器。类指针的类,最大特点是底层数据共享。只对指针进行了浅拷贝。引用计数的工作方式如下四大特点:i、除了初始化对象
1.Android基础知识之智能指针:强指针和弱指针      Android中定义了两种智能指针类型,一种是强指针sp(strong pointer),另外一种是弱指针(weak pointer)。其实称之为强引用和弱引用更合适一些。强指针与一般意义的智能指针概念相同,通过引用计数来记录有多少使用者在使用一个对象,如果所有使用者都放弃了对该对象的引用,则该对象将被自
### Android智能指针SP初始化 作为一名经验丰富的开发者,我将向你展示如何在Android开发中实现智能指针SP的初始化。智能指针SP是一种能够自动释放资源的智能指针,可以帮助我们更好地管理内存。现在让我们一起来完成这个任务吧! #### 整体流程 首先,我们需要了解整个过程的流程。接下来,我将用表格展示每个步骤。 ```mermaid erDiagram 关系图表 ``
原创 5月前
44阅读
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阅读
auto_ptr已经废弃。原因是它行为上是"排它性"指针,但又允许编译器实现拷贝操作,拷贝后的右值会被赋空。即将“传递”语义掩盖在“拷贝”动作之下。即a=b时,作为右值的b的物理指针会是NULL。会造成使用它的容器混乱。这是典型的设计缺陷。既然是“传递”语义,就不应以“拷贝"形式出现。另一方面,它对于数组的指针也支持不好,无法完成new []和delete []的配对。 unique_p
前言对智能指针进行学习,并在下一篇博客中实现简单的智能指针智能指针简介C++中使用对内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理;程序员自己管理对内存可以提高程序的效率,但是整体来说对内存的管理是麻烦的;据此引入了智能指针的概念: 智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。所以智能指针的作用原理就是在函数结束时自动释放内存空间
文章目录智能指针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
  • 2
  • 3
  • 4
  • 5