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

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

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

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
更多原创,欢迎关注: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)

cpp 复制代码
#include <utils/StrongPointer.h>

using namespace android;

class MyClass {};

int main() {
    sp<MyClass> strongPtr = new MyClass();  // 创建一个强引用指针
    // 使用 strongPtr 指向的对象
    return 0;
}

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

cpp 复制代码
#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++ 中,通常使用弱指针来表示弱引用。
相关推荐
huangyuchi.4 天前
【C++】智能指针
开发语言·jvm·c++·笔记·c++11·智能指针·shared_ptr
愚润求学14 天前
【C++11】智能指针
开发语言·c++·笔记·c++11·智能指针
柴郡猫乐园17 天前
智能指针之设计模式5
开发语言·设计模式·智能指针
毛豆的毛豆Y19 天前
AOSP Android14 Launcher3——动画核心类QuickstepTransitionManager详解
aosp·launcher3·android14
毛豆的毛豆Y24 天前
AOSP Android14 Launcher3——RecentsView最近任务数据加载
aosp·launcher3·android14
毛豆的毛豆Y24 天前
AOSP Android14 Launcher3——点击桌面图标启动应用动画流程
aosp·launcher3·android14
毛豆的毛豆Y25 天前
AOSP Android14 Launcher3——远程窗口动画关键类SurfaceControl详解
aosp·launcher3·android14
毛豆的毛豆Y1 个月前
AOSP Android14 Launcher3——底部任务栏Taskbar详解
aosp·launcher3·android14
Watink Cpper2 个月前
[C++] 智能指针 进阶
开发语言·c++·指针·智能指针·模拟实现·raii·资源获取即初始化
@hdd3 个月前
C++ | 智能指针
c++·智能指针