C++带有dll的单例类

bla*_*ter 17 c++ dll static

我用类创建了一个静态库:

class CLog
{
   private:
   CLog();
   ...
   ...
   public:
   static CLog& GetInstance()                                
   {
           static CLog Instance;
           return Instance;
   }
   void Write(char *cpPr);
};
#define Log CLog::GetInstance()
Run Code Online (Sandbox Code Playgroud)

该库链接到dll和主程序.该DLL由LoadLibrary加载.在这种情况下很明显,在主exe和dll中调用Log.Write会创建两个独立的CLog实例.任何想法如何解决这个问题仍然提供动态加载DLL?

Mar*_*som 11

问题是每个链接静态库的项目,无论是主程序还是DLL,都将获得静态变量的单独副本.这打破了创建单例的典型方法.

最简单的方法是创建另一个包含单例的DLL,而不是静态库.由于只有一个链接器输出将包含静态变量,因此问题得以解决.

在我自己的情况下,我创建了一个单例管理器,它通过唯一的GUID识别每个单例,并确保应用程序范围内只存在一个副本.单例管理器作为自己的DLL存在.