我怎样才能每个 dylib 有一个单例?

Posted

技术标签:

【中文标题】我怎样才能每个 dylib 有一个单例?【英文标题】:How can I have one singleton per dylib? 【发布时间】:2020-03-31 23:42:21 【问题描述】:

我正在尝试制作一个 VST 插件(音频软件的动态库),其中包含一个单例(使用静态 C++ 成员)。问题是,当我尝试加载多个插件实例(即 dylib 的 2 个副本)时,静态成员会被共享,即 dylib 的 2 个实例共享相同的 dylib。是否有一种机制可以让您禁用跨 dylib 边界共享静态变量?例如那么同一个dylib的每个实例都有自己的单例吗?

【问题讨论】:

【参考方案1】:

我所知道的所有动态库都是一个二进制文件,它的一个实例被加载到内存中并被多个进程使用。如果该单个实例中有一个单例,则使用该共享库的所有进程都将看到相同的单例。您真正想要的是这些对象的动态集合。当进程加载库时创建一个,当公主卸载库时销毁相应的一个。

【讨论】:

以上是关于我怎样才能每个 dylib 有一个单例?的主要内容,如果未能解决你的问题,请参考以下文章

单例设计模式

java设计模式之--单例模式

如何使用 Swift 3 将单例与 Alamofire 一起使用?

C# 中的单例是啥?

spring的单例模式

java的单例