回顾下前面提到的Android 轻量级智能指针 LightRefBase:
class Person : public LightRefBase<Person>{
}
sp<Person>{
.Person *mptr;
sp(){
incStrong;
}
~sp(){
decStrong;
}
}
类比,强弱指针可能会有如下统一实现:
class RefBase{
private:
int mStrong;
int mWeak;
Public:
void incStrong();
void decStrong();
void incWeak();
void decWeak();
}
进一步抽象剥离:
StrongWeakRef_type mRefs;
class StrongWeakRef_type{
private:
int mStrong;
int mWeak;
Public:
//void incStrong(); //为了保持兼容,这两个方法保留在class RefBase中
//void decStrong();
void incWeak();
void decWeak();
}
实际开发中涉及到多个模块相互调用时,使用者常常是引用对方的头文件,使用者在头文件中往往不想看到private属性的mStrong和mWeak,只想知道可以调用的Public接口。我们想到的优化方法是,将一个类拆成两部分:1)固定接口类;2)容易变化的实现类。具体如下:
//抽象为接口类。放在头文件中。
class weakRef_type{
public:
void incWeak();
void decWeak();
}
//独立为实现类。放在cpp文件中。
class weakRef_impl :

本文介绍了Android中基于RefBase的强弱智能指针使用和实现,通过类比和代码示例展示了如何避免内存泄漏和死锁问题,强调了弱指针在相互引用场景下的优势,并探讨了RefBase内部标志位mFlags及其生命周期管理原则。
最低0.47元/天 解锁文章

1万+

被折叠的 条评论
为什么被折叠?



