自己做网站能关联支付宝吗,京津冀协同发展的首要任务有,河北seo网站优化公司,怎么免费搭建平台简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android… 简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android系统攻城狮 1.前言 本篇目的:解决Android12之强弱智能指针sp/wp循环引用死锁问题. 在Android中的智能指针包括强引用(Strong Reference)智能指针(sp)和弱引用(Weak Reference)智能指针(wp)。它们都是为了更方便地管理对象的生命周期而引入的。 强引用智能指针(sp): 强引用智能指针是一种强引用计数指针,用于管理对象的生命周期。当一个对象被一个sp指针持有时,该对象的引用计数会增加。只有当所有sp指针都释放时,对象才会被销毁。强引用智能指针通过重载了对象的拷贝构造函数、赋值操作符和析构函数来实现引用计数的管理。 弱引用智能指针(wp): 弱引用智能指针是一种弱引用计数指针,用于解决对象间的循环引用问题。与强引用智能指针不同,弱引用智能指针不会增加对象的引用计数。弱引用智能指针允许你持有一个对象的弱引用,并且在对象被销毁后自动变为null。当需要使用对象时,可以通过wp提供的方法来尝试获取对象的强引用。 在Android中,强引用智能指针(sp)和弱引用智能指针(wp)是通过android::sp和android::wp来实现的,它们是Android Framework中的类型。 使用智能指针可以有效地管理对象的生命周期,并解决循环引用问题。当程序不再需要引用对象时,强引用会在引用计数变为0时自动释放对象。而弱引用则提供了一种获取对象的方式,即使对象在强引用计数变为0时已经被销毁。 强引用智能指针(sp)用于持有对象的强引用,管理对象生命周期并自动释放对象;弱引用智能指针(wp)用于解决循环引用问题,允许获取对象的强引用,并在对象释放后自动置为null。这样可以更方便地管理和使用Android中的对象。 2.调试实例
1.sp和sp引用同一个类对象,造成死锁,无法调用析勾函数释放内存和引用数量。
/***********************************************************
* Author : 公众号: Android系统攻城狮
* Create time : 2023-09-20 00:05:13 星期三
* Filename : lightpointer.cpp
* Description : sp和sp智能指针相互引用导致的死锁问题.
************************************************************/
#include stdio.h
#include iostream
#include utils/RefBase.husing namespace android;
using namespace std;class ClassB;class ClassA : public RefBase {
public:ClassA() {cout "ClassA Constructor" endl;}~ClassA() {cout "ClassA Destructor" endl;printf("xxx---------- line = %d, count = %d\n",__LINE__,this-getStrongCount());}void setClassA(spClassA obj) {mClassA = obj;}private:spClassA mClassA;
};int main() {//v1.0spClassA objA = new ClassA;spClassA sp1(objA);sp1-setClassA(objA);printf("xxx---------- line = %d, count = %d\n",__LINE__