我正在构建一个将在主机中使用的插件。这个插件正在使用一个单例服务,我想在任何地方轻松访问。问题出现在我多次实例化同一个插件时,同一个(静态)单例,特定于可运行的,将成为所有实例化插件中的碎片。一般来说,是否有减少单身人士(C++)范围的方法? 由于每个插件本身就是一个实例,我显然可以将插件的根类传递给它的所有子类,但是我希望尽可能保持相同的全局单例设计。避免插件中的单件被所有实例共享
3
A
回答
0
单身人士在内部使用静态变量。 此静态变量的作用域由源文件指定,它由当前的可运行对象定义和分区。由于这些原因,当在同一个主机下运行(然后运行相同的可执行文件)时,两个插件(它们是相同的代码)确实共享相同的静态变量(并且扩展为同一个单例)。 正如我们在这个问题中假设每个插件的代码都是相同的,分割这些单例的唯一方法就是运行一个新的可执行文件。这可以通过使用fork unix命令完成,例如两个进程都会保存自己的内存范围。显然(正如大多数人所评论的),在这种情况下避免使用单例是一种更好的方法,因为分支过程只是增加了无用的复杂性。
3
是否有单身的理由?理由是当你需要强制执行时,只有一个,并且需要提供一个单一的访问点。如果这些不是真正的要求,那么只需创建一个并在需要的地方传递它。
我会逐渐摆脱单身。
单身人士做了很多,还是不多?
您可能需要将它分成几部分。
如果它没有多大作用,只需将它传递到需要的地方,并摆脱它的单身性。
如果它提供了很多服务,请为每个服务创建接口并将它们传递到需要的地方。您的设计将会改进并变得更加易于理解和测试。
首先,接口的实现可以委托给原来的单例,但是你最终想让它们自包含。
+0
好吧我同意这一切,但从技术上讲:我可以想象,分叉进程或运行新的执行将是一种方法来分割这些单身人士。这不是一个好的做法,只是要知道如何在内部运行外部代码,而不会冒险让它们相互覆盖。 –
相关问题
- 1. 避免实例化maven依赖插件
- 2. 插件,以避免在Wordpress中共享用户名
- 3. 父__init__类变量被所有子实例中共享
- 4. 共享集服务,避免在共享组件
- 5. App引擎Memcache在所有实例中共享单个值
- 6. 共享单实例共享库的没有导出它
- 7. 如何在多个Maven插件Mojos中共享实例相同的实例?
- 8. 共享组件实例 - Angular 4
- 9. RSpec的共享实例不能共享
- 10. 共享DLL中有多个单例实例吗?
- 11. 如何避免共享包文件夹下的多个宝石
- 12. 避免Java的实例
- 13. 如何避免Rspec共享示例'之前定义的'警告?
- 14. 共享NSHTTPCookieStorage实例
- 15. 共享实例swift
- 16. 计算在共享文件夹上运行的.exe的所有实例
- 17. WordPress的插件共享
- 18. 所有JasperServer的共享属性文件
- 19. 在同一个组件的所有实例之间共享状态?
- 20. FireBreath插件不会在所有插件实例上绘制
- 21. 如何在部署期间避免共享包文件夹
- 22. 避免在NFS共享文本文件上同时写入
- 23. 如何避免共享内存泄漏
- 24. 避免共享驱动器崩溃
- 25. 如何避免共享状态?
- 26. 共享主机发送的电子邮件被阻止。有没有办法避免这种情况?
- 27. web.py:避免全局实例?
- 28. ASMX服务共享单个类实例
- 29. 使用单例实现共享数据
- 30. 共享类实例(创建和共享单例)的最佳方式是什么?
所以你问如何做一个单身的几个副本? :-) –
实际上是将其范围限制为一个插件实例,而不是整个主机应用程序。也许根本没有办法用静态变量来实现这一点,但我想确保。在编写插件时,通常您不希望它与第二个插件共享数据。 –