我正在构建一个将在主机中使用的插件。这个插件使用单例来提供我想在任何地方轻松访问的服务。当我多次实例化同一个插件时,问题就来了,同一个(静态)单例,特定于可运行,将在所有实例化插件中分片。一般来说,有没有一种方法可以减少单例 (c++) 的范围?由于每个插件本身就是一个实例,我显然可以将插件的根类传递给它的所有子类,但我希望尽可能保持相同的全局单例设计。
问问题
251 次
2 回答
3
有单身的理由吗?基本原理是当您需要强制只有一个,并且需要提供单点访问时。如果这些不是真正的要求,那么只需创建一个并在需要的地方传递它。
我会逐渐摆脱单身人士。
单身人士做了很多,还是不多?
您可能需要将其分成几部分。
如果它做的不多,只需将它传递到需要的地方,并摆脱它的单一性。
如果它提供大量服务,请为每个服务创建接口并将它们传递到需要它们的地方。您的设计将得到改进,变得更易于测试和理解。
起初,接口的实现可以委托给原始单例,但您希望最终使它们自包含。
于 2012-12-30T11:29:48.390 回答
0
单例在内部使用静态变量。此静态变量的范围由源文件指定,在该源文件中它由当前可运行文件定义和分区。出于这些原因,在同一主机(然后是同一可运行对象)下运行时,两个插件(它们是相同的代码)确实共享相同的静态变量(并且扩展为相同的单例)。正如我们在这个问题中假设每个插件的代码相同,拆分这些单例的唯一方法是运行一个新的可执行文件。这可以使用 fork unix 命令来完成,例如两个进程都将拥有自己的内存范围。显然(正如你们大多数人评论的那样)在这种情况下避免使用单例是一种更好的方法,因为分叉一个进程只会增加无用的复杂性。
于 2013-01-08T14:10:36.693 回答