问题
在下面这个例子中,可执行程序app链接一个静态库libsingleton.a和两个动态库libfirst.so,libsecond.so。
- 静态库
libsingleton.a是一个单例对象,在动态库libfirst.so和libsecond.so中都被链接。 - 可执行程序
app链接静态库libsingleton.a,动态库libfirst.so,libsecond.so。
在动态库,可执行程序中都调用了单例对象singleton的DoSomething方法,它将输出单例对象的地址。最终输出的结果是每个对象的地址都不相同。这显然不符合我们的预期。就好比原本有一个封装了日志功能的静态,被多个动态库链接使用,本意是都使用同一个日志全局对象输出日志,结果缺产生了多个日志对象,这显然是不符合业务需求的。
先看下这个例子:
例子
生成静态库libsingleton.a
class Singleton {
public:
static Singleton* GetInstance();
static void Release();
public:
void DoSomething(void);
private:
Singleton(){
};
~Singleton(){
};
private:
static Singleton* _instance;
};
#include <iostream>
#include "singleton.h"
Singleton* Singleton::_instance = nullptr;
Singleton* Singleton::GetInstance(void) {

最低0.47元/天 解锁文章
1879

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



