回顾下前面提到的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 :