我有一个关于静态库(.a / .lib)中的单例如何表现的问题。
class MySingleton {
public:
static
MySingleton&
GetInstance() {
static MySingleton singleton;
return singleton;
}
private:
explicit
MySingleton() {}
virtual
~MySingleton() {}
};
如果使用静态库,如何确保在操作系统级别上只有一个MySingleton?
如您所知,静态库在内存中有多个副本。这些副本是否相互干扰或完全无关?这意味着如果您有app1和app2,app1是否有一个MySingleton,app2也有一个MySingleton?
如果一旦app1启动并消耗MySingleton,app2就没有机会创建另一个MySingleton,即使它拥有另一个静态库副本。
答案 0 :(得分:1)
在操作系统级别,除共享库外,进程不共享任何内存。 进程A将拥有自己的单例实例,进程B将具有完全不同的单例实例,并且这两个进程彼此隔离。
如果您想要任何涉及多个进程的逻辑,那么请按照共享库/共享内存的方式进行思考。