在C++中创建多个全局静态实例?

cri*_*ell 4 c++ singleton static global

我们为产品使用的库之一使用单例来访问它.我很确定它是作为静态实例实现的(它不是开源的).这适用于单个文档应用程序,但我们的应用程序可能加载了多个文档.我假设访问该实例是这样写的:

Instance* getInstance() {
    static Instance* inst = new Instance();
    return inst;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,有没有办法可以强大地创建多个实例?我唯一能想到的就是不仅要处理并使用某种类型的IPC来将它们联系在一起.我想不出任何不那么黑的东西.

我已经要求供应商实现某种类型的会话令牌,因此我可以拥有多个并发实例,但它们很大而且我们很小.

科里

编辑:

  • 该机器是Windows机器
  • 全球静电基本上是一个大工厂.我想要某种类型的会话令牌,所以我可以很容易地说"从这个会话中释放所有资源"(没有办法重新初始化我所知道的全局静态)

而不是尝试一些狡猾的恶作剧来获得我想要的东西,我将用我自己的类包装整个事物并为每个getter添加一个会话密钥.在内部,我将跟踪已分配的内容添加我自己的发布方法以返回资源.由于很多原因,这是次优的,但我想不出更好的主意.

感谢大家的好评.

Dre*_*ins 5

即使你能够解决这个特殊问题,同时让一切都发生在进程中,我也会担心这个单例问题只是冰山一角.该库显然不是为您的场景设计的.

将DLL的每个负载隔离到它自己的过程听起来对我来说是正确和非hacky,虽然当然它对你来说可能是昂贵的.