我如何才能为每个已编译的 program/dynamic 库实现一个对象的单个实例?

How could I acomplish having a single instance of an object per compiled program/dynamic library?

我正在为大型应用程序开发文件系统观察器。对于我的 FileSystemWatcher class 的每个实例,原始版本都有一个监视线程 运行。但是,这会创建太多线程。

该应用程序包含许多 DLL "plugins",每个静态 link 我的文件系统观察器 class 所在的基本库是:

现在这些 DLL 可能不会共享一个线程来监视文件系统(它们甚至可能不会使用完全相同版本的库进行编译),但是每个插件,a.dllb.dll在图片中,应该有一个线程来处理所有文件系统监视请求。我可以处理实现,但我不知道如何为每个 dll 创建一个实例。

想法是有一个单例,但每个 dll 有一个变量实例:

class FileSystemWatcherManager
{
public:
  static FileSystemWatcherManager* Instance()
  {
    // How to make it single instance per dll?
    static FileSystemWatcherManager instance;
    return &instance;
  }
};

如何实现?

在 Windows 上,如果静态存储持续时间变量未被 dllexport 编辑,则每个 DLL 和 EXE 文件都将拥有自己的副本。所以只要确保 FileSystemWatcherManagerFileSystemWatcherManager::Instance 都没有从 DLL 中导出,您应该会得到您想要的行为。