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

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

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

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

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

欢迎关注Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

    • 🌻1.前言
    • 🌻2.Android之智能指针的弱引用、强引用、弱指针、强指针介绍
      • 🐓<1>.强引用 (Strong Reference):
      • 🐓<2>.弱引用 (Weak Reference):
      • 🐓<3>.强指针 (Strong Pointer):
      • 🐓<4>.弱指针 (Weak Pointer):
    • 🌻3.代码实例
      • 🐓<1>.强引用 (Strong Reference)
      • 🐓<2>.弱引用 (Weak Reference)
    • 🌻4.总结
      • 🐓<1>.强指针 (Strong Pointer):
      • 🐓<2>.弱指针 (Weak Pointer):
      • 🐓<3>.强引用 (Strong Reference):
      • 🐓<4>.弱引用 (Weak Reference):

🌻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++ 中,通常使用弱指针来表示弱引用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

四川古力未来科技抖音小店正规,科技创新引领行业潮流

随着互联网的迅猛发展&#xff0c;电商平台日益成为人们购物的主要渠道。在众多电商平台中&#xff0c;抖音小店以其独特的社交属性和内容营销方式&#xff0c;吸引了大量消费者的关注。四川古力未来科技抖音小店作为其中的佼佼者&#xff0c;以其正规的经营模式、丰富的产品线…

如何理解WMS仓储管理系统的建设理念

在现代企业经营中&#xff0c;WMS仓储管理系统的建设已成为提升竞争力的关键所在。随着科技的不断发展&#xff0c;越来越多的企业开始寻求实现高度自动化、信息化和网络化的生产模式。WMS仓储管理系统则成为实现这一目标的重要工具。本文将深入探讨WMS仓储管理系统解决方案的建…

7-13 日K蜡烛图

题目链接&#xff1a;7-13 日K蜡烛图 一. 题目 1. 题目 2. 输入输出格式 3. 输入输出样例 4. 限制 二、代码 1. 代码实现 #include <iostream> using namespace std;// 实心与空心 static const string str1(float Open, float Close) {float num Open - Close;if (…

竞赛升温,量子革命待发

人工智能已经吸引了全球企业巨头和政界领袖的广泛关注。同时&#xff0c;一场激烈的全球竞赛正在展开&#xff0c;目标是开发被许多专家视为下一个领域革命性技术的量子计算。 量子计算机利用量子物理学的原理&#xff0c;有潜力推动包括药物研究、股票市场分析以及数据加密在内…

[网鼎杯 2020 玄武组]SSRFMe

[网鼎杯 2020 玄武组]SSRFMe 源码 <?php function check_inner_ip($url) {$match_resultpreg_match(/^(http|https|gopher|dict)?:\/\/.*(\/)?.*$/,$url);if (!$match_result){die(url fomat error);}try{$url_parseparse_url($url);}catch(Exception $e){die(url foma…

解决grafana报错This panel requires Angular (deprecated).

背景&#xff1a;使用docker部署了prometheus,grafana,node exporter和cadvisor 然后去grafana官网下载成熟的模板导入到平台&#xff0c;发现模板上的图标全部报错This panel requires Angular (deprecated). 解决方法&#xff1a;修改grafana配置文件&#xff0c;如下&…

电脑开机提示“no bootable device”,无法进入系统

当您的Windows 10电脑开机时提示“no bootable device”,这意味着计算机无法找到一个可以启动操作系统的设备。这个问题通常与硬件连接、BIOS设置、硬盘问题、引导扇区故障或系统文件损坏等有关。以下是一系列详细的解决步骤: 检查硬件连接:关闭电脑,拔掉电源线,打开机箱检…

合并单元格的excel文件转换成json数据格式

github地址: https://github.com/CodeWang-Ay/DataProcess 类型1 需求1: 类似于数据格式: https://blog.csdn.net/qq_44072222/article/details/120884158 目标json格式 {"位置": 1, "名称": "nba球员", "国家": "美国"…

threejs 基础知识点汇总

threejs 基础知识点汇总 之前写了几篇博文&#xff0c;但是我觉得写的不好&#xff0c;我今天再补充一篇还不好的&#xff0c;把基础知识点汇总一下&#xff0c;不写运行的代码了&#xff0c;只写关键代码&#xff0c;但是看了之前我写的那几篇&#xff0c;看这篇的话问题其实不…

PTA(题目集三 题目 代码 C++ 注解)

目录 题目一&#xff1a; 代码&#xff1a; 题目二&#xff1a; 代码&#xff1a; 题目三&#xff1a; 代码&#xff1a; 题目四&#xff1a; 代码&#xff1a; 题目五&#xff1a; 代码&#xff1a; 题目六&#xff1a; 代码&#xff1a; 题目七&#xff1a; 代码…

如何利用AI绘制美观的地学图片摘要--提供各类矢量的地表地形和植被元素

我们经常在高级期刊的文章里面见到类似以下的图片&#xff08;Anatomy of a Glacier - Glacier Bay National Park & Preserve (U.S. National Park Service)&#xff09; 这样的表达对于研究结果非常生动形象。下面的这个网站提供了很多类似的元素&#xff0c;可以有助于我…

MySQL8.0.36-社区版:Windows和Linux上的应用部署(1)

简介&#xff1a; 本章不做过多的介绍了&#xff0c;你可以去官方的文章查看到更详细&#xff0c;更专业的介绍&#xff0c;我这里直接讲解如何进行安装 MySQL :: MySQL Documentationhttps://dev.mysql.com/doc/ Windows部署 这里我使用的是win10专业版系统 MySQL :: Dev…

Java项目——瑞吉外卖笔记

hello&#xff0c;你好鸭&#xff0c;我是Ethan&#xff0c;很高兴你能来阅读&#xff0c;昵称是希望自己能不断精进&#xff0c;向着优秀程序员前行!&#x1f4aa;&#x1f4aa;&#x1f4aa; 目前博客主要更新Java系列、数据库、项目案例、计算机基础等知识点。感谢你的阅读和…

使用MQTT.fx接入新版ONENet(24.4.8)

新版ONENet使用MQTT.fx 模拟接入 目录 新版ONENet使用MQTT.fx 模拟接入开始前的准备创建产品设备获取关键参数 计算签名使用MQTT.fx连接服务器数据流准备与上传数据流准备数据发送与接收 开始前的准备 创建产品 设备下载Token签名工具生成签名 创建产品设备 根据以下内容填写…

算法四十天-删除排序链表中的重复元素

删除排序链表中的重复元素 题目要求 解题思路 一次遍历 由于给定的链表是排好序的&#xff0c;因此重复的元素在链表中的出现的位置是连续的&#xff0c;因此我们只需要对链表进行一次遍历&#xff0c;就可以删除重复的元素。 具体地&#xff0c;我们从指针cur指向链表的头节…

C++类与对象上(个人笔记)

类与对象 1.面向过程和面向对象初步认识2.类的定义3.类的访问限定符及封装3.1 访问限定符 4.封装5.类的实例化6.类对象6.1类对象的内存计算6.2内存对齐规则&#xff08;回顾&#xff09; 7.this指针7.1 this指针的特性 1.面向过程和面向对象初步认识 C语言是面向过程的&#x…

Java考题讲解一共5套,也可以在线刷题

【拯救者】Java刷题训练(二级专升本期末自考必备) &#x1f4d9;巩固基础 &#x1f4dc;知道考点 狠狠提分⬆️ (二级专升本期末自考必备) 大纲 一共5套题,每套可以先看视频,然后刷题. 末尾汇总了5套选择 填空 判断题, 优点: 可以查看解析和错题

L2-021 点赞狂魔

输出标签出现次数平均值最小的那个是指标签出现次数K。 模拟。 #include<bits/stdc.h> using namespace std; #define int long long const int n1e611; int a,b,c,ss; struct s {int x,z;string y; }q[n]; bool cmp(s a1,s a2) {if(a1.x!a2.x)return a1.x>a2.x;e…

C语言进阶课程学习记录-第26课 - 指针的本质分析

C语言进阶课程学习记录-第26课 - 指针的本质分析 *号实验-指针的大小实验-传址交换数值实验-const与指针小结 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程&#xff0c;图片全部来源于课程PPT&#xff0c;仅用于个人学习记录 *号 实验-指针的大小 #include <stdio.h…

LeetCode 836. 矩形重叠

解题思路 相关代码 class Solution {public boolean isRectangleOverlap(int[] rec1, int[] rec2) {int x1 rec1[0];int y1 rec1[1];int x2 rec1[2];int y2 rec1[3];int a1 rec2[0];int b1 rec2[1];int a2 rec2[2];int b2 rec2[3];return Math.min(y2,b2)>Math.max…