单个类实例在GUI exe和dll中是不同的

sde*_*dev 4 c++ windows singleton mfc

在我的GUI应用程序(MFC)中,我使用dll在屏幕上显示某些内容.我有一个静态库,它有一个单例类.例如:sing.lib.我在应用程序(exe)项目和dll项目中包含sing.lib(coz都使用这个单例类)

问题是进入exe的实例和dll是不同的.两者都调用构造函数!! 请参阅单例类代码段.

class A
{
private:
    A();
    virtual ~A();
    static A* m_pInstance;
public:
    static A* GetInstance()
    {
        if (NULL == m_pInstance)
        {
            m_pInstance = new A();
        }
        return m_pInstance;
    }
}
Run Code Online (Sandbox Code Playgroud)

par*_*mar 5

如果要在dll和exe之间共享单例实例,请将其定义放在动态链接库中,而不是静态库中.

通常,如果您希望某些数据是全局且唯一的,则不应将其放在静态库中.

考虑

//static lib

int CurrentCounter =0;

int getNextCounter()
{
    return CurrentCounter;
}
Run Code Online (Sandbox Code Playgroud)

静态库中的这样的代码.在你的情况下,如果exe和dll链接到这个库,每个都将获得自己的CurrentCounter.因此exe和dll可以同时具有不同的CurrentCounter值.