Android14之智能指针的弱引用、强引用、弱指针、强指针用法区别及代码实例(二百零五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀
优质专栏:多媒体系统工程师系列原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门实战课原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:Android源码中,理解智能指针的弱引用、强引用、弱指针、强指针的用法与区别。

2.Android之智能指针的弱引用、强引用、弱指针、强指针介绍

  • 在 Android 的 C++ 开发中,弱引用、强引用、弱指针和强指针都是用于管理对象生命周期的工具。
  • 它们是在 Android Framework 中实现的智能指针,用于避免内存泄漏和悬空指针问题。

<1>.强引用 (Strong Reference):

  • 定义:sp(android::sp)是一个智能指针,用于强引用计数对象。当使用 sp 指向一个对象时,对象的引用计数会增加,只有当所有 sp 指针被释放时,对象才会被销毁。
  • 用途:强引用用于确保对象在被引用时不会被销毁,从而避免悬空指针和内存泄漏。
  • 用法:通过 sp 创建一个指向对象的智能指针,当不再需要时,释放指针或者让其超出作用域即可。

<2>.弱引用 (Weak Reference):

  • 定义:wp(android::wp)是一个智能指针,用于弱引用计数对象。与 sp 不同,wp 不会增加对象的引用计数,因此它不会阻止对象被销毁。
  • 用途:弱引用用于检查对象是否仍然存在,但不会影响对象的生命周期。
  • 用法:通过 wp 创建一个指向对象的弱引用指针,可以通过 promote() 方法将弱引用提升为强引用,以检查对象是否仍然存在。

<3>.强指针 (Strong Pointer):

  • 定义:强指针是一个指向对象的原生指针,它通常用于表示强引用。
  • 用途:强指针用于指向需要持久性的对象,但不提供自动内存管理功能,程序员需要手动管理对象的生命周期。
  • 用法:通过创建一个指向对象的指针来使用强指针,需要手动释放内存。

<4>.弱指针 (Weak Pointer):

  • 定义:弱指针是一个指向对象的原生指针,它通常用于表示弱引用。
  • 用途:弱指针用于指向不需要持久性的对象,不影响对象的生命周期。
  • 用法:通过创建一个指向对象的指针来使用弱指针,可以检查对象是否仍然存在。

3.代码实例

<1>.强引用 (Strong Reference)

#include <utils/StrongPointer.h>using namespace android;class MyClass {};int main() {sp<MyClass> strongPtr = new MyClass();  // 创建一个强引用指针// 使用 strongPtr 指向的对象return 0;
}

<2>.弱引用 (Weak Reference)

#include <utils/WeakPointer.h>using namespace android;class MyClass {};int main() {sp<MyClass> strongPtr = new MyClass();  // 创建一个强引用指针wp<MyClass> weakPtr = strongPtr;       // 创建一个弱引用指针,指向相同的对象sp<MyClass> sptr = weakPtr.promote();  // 通过弱引用提升为强引用if (sptr != nullptr) {// 使用 sptr 指向的对象} else {// 对象已被销毁}return 0;
}

4.总结

<1>.强指针 (Strong Pointer):

  • 强指针是指向对象的指针,它会增加对象的引用计数,从而延长对象的生命周期。当有一个或多个强指针指向某个对象时,该对象的引用计数会增加。只有当所有指向该对象的强指针都释放时,对象的引用计数才会减少,从而触发对象的销毁。

<2>.弱指针 (Weak Pointer):

  • 弱指针也是指向对象的指针,但它不会增加对象的引用计数。即使存在一个或多个弱指针指向某个对象,该对象的引用计数也不会增加,因此不会影响对象的生命周期。弱指针主要用于检查对象是否仍然存在,而不影响对象的生命周期。

<3>.强引用 (Strong Reference):

  • 强引用是指对象的直接引用,它会增加对象的引用计数并保持对象的生命周期。
  • 在 C++ 中,通常使用强指针来表示强引用。

<4>.弱引用 (Weak Reference):

  • 弱引用是指对对象的非直接引用,它不会增加对象的引用计数也不会影响对象的生命周期。
  • 在 C++ 中,通常使用弱指针来表示弱引用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/596879.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5560.树的直径

蛮不错的一道题目&#xff0c;你要利用树的性质分析出&#xff0c;你只需要维护上一次的树的直径的两个端点就好了 #include<iostream>using namespace std; using ll long long; using pii pair<int,int>; const int N 6e510; const int inf 0x3f3f3f3f; cons…

AIGC实战——ProGAN(Progressive Growing Generative Adversarial Network)

AIGC实战——ProGAN 0. 前言1. ProGAN2. 渐进式训练3. 其他技术3.1 小批标准差3.2 均等学习率3.3 逐像素归一化 4. 图像生成小结系列链接 0. 前言 我们已经学习了使用生成对抗网络 (Generative Adversarial Network, GAN) 解决各种图像生成任务。GAN 的模型架构和训练过程具有…

python接入AI 实现微信自动回复

import numpy as np # 引入numpy库&#xff0c;目的是将读取的数据转换为列表 import pandas as pd # 引入pandas库&#xff0c;用来读取csv数据 from uiautomation import WindowControl # 引入uiautomation库中的WindowControl类&#xff0c;用来进行图像识别和模拟操作 i…

组合ZKP代价:探索ZKP中non-native域运算 最新进展

1. 引言 前序博客&#xff1a; 递归证明——cycles of curves是必选项&#xff1f; ‘Foreign field’ 或 ‘non-native field’ 算术在ZKP&#xff08;zero knowledge proof零知识证明&#xff09;系统中随处可见。若想使用 ZKP 进行&#xff1a; 布尔运算公钥密码学或 证…

机器学习(五) -- 监督学习(3) -- 朴素贝叶斯

系列文章目录及链接 目录 前言 一、朴素贝叶斯通俗理解及定义 二、原理理解及公式 1、概率基础 2、贝叶斯公式 3、拉普拉斯平滑系数 三、**算法实现 四、接口实现 1、新闻数据集介绍 2、API 3、流程 3.1、获取数据 3.2、数据预处理 3.3、特征工程 3.4、朴素贝叶…

[Java线程池]ExecutorService|CompletionService的区别与选择

这段时间对业务系统做了个性能测试&#xff0c;其中使用了较多线程池的技术&#xff0c;故此做一个技术总结。 这次总结的内容比较多&#xff0c;主要是四个&#xff1a; ExecutorServiceCompletionServiceRunnableCallable 前两个是线程池相关接口&#xff0c;后两个是多线…

MacOS Docker 可视化面板 Portainer

一、简介 Portainer 是一个可视化的容器镜像图形管理工具&#xff0c;使用 Portainer 可以轻松构建、管理和维护Docker 环境。 而且完全免费&#xff08;portainer-ce 是免费的&#xff0c;portainer-ee 是需要授权的&#xff0c;今天安装的是 portainer-ce 版本&#xff09;&…

强力推荐一款具有故障保护和CAN FD 功能的隔离CAN收发器 SiLM5150S

控制器局域网总线(CAN&#xff0c;Controller Area Network)&#xff0c;是一种用于实时应用的串行通讯协议总线&#xff0c;它可以使用双绞线来传输信号&#xff0c;是目前应用最广泛的现场总线之一。CAN协议具有实时性强、可靠性高、传输距离远的特点&#xff0c;适用于各种复…

【智能算法应用】猎人猎物优化算法(HPO)在WSN覆盖中的应用

目录 1.算法原理2.数学模型3.结果展示4.参考文献 1.算法原理 【智能算法】猎人猎物算法&#xff08;HPO&#xff09;原理及实现 2.数学模型 3.结果展示 HPO设置区域边长为20&#xff0c;节点数为35&#xff0c;感知半径为2.5&#xff0c;实验结果如下&#xff1a; 4.参考…

博客部署001-centos安装docker

1、安装docker 1.1 卸载旧版本的 Docker sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine1.2 设置 Docker 仓库 安装 Docker Engine 之前&#xff0c;首先需要设置…

ABAP 读取EXCEL 内容,OLE

代码: INCLUDE OLE2INCL. DATA: GS_EXCEL TYPE OLE2_OBJECT , GS_WBOOKLIST TYPE OLE2_OBJECT, GS_SHEETS TYPE OLE2_OBJECT, GS_CELL1 TYPE OLE2_OBJECT , CELL TYPE OLE2_OBJECT, ROWS …

深度剖析鞋服品牌商品数字化管理的重要性

随着信息技术的迅猛发展与市场竞争的加剧&#xff0c;鞋服品牌商品数字化管理的重要性愈发凸显。数字化管理不仅关乎企业运营效率的提升&#xff0c;更是品牌实现差异化竞争、提升顾客体验、构建智慧零售生态的关键所在。对于鞋服品牌企业而言&#xff0c;提升商品数字化管理的…