小编A.V*_*.V.的帖子

Singleton构造函数失败了c ++ - 可能是什么?

我实际上面临着一个巨大的问题:我有一个单身课程.我的程序是一个多线程MFC,因此可以从不同的线程调用单例的构造函数.我用一个互斥体包围了单例实例 - getter函数,以避免死锁和多个构造.下面的调用意味着函数在第一次直接失败.

该函数看起来像(LOG_MSG宏将给定的字符串记录到我的日志文件中):

MyClass& MyClass::singleton ()
{
    LOG_MSG("MyClass::singleton -> jump in");

    static CMutex oInitMutex;
    try
    {
        CSingleLock oSingleLock((CSyncObject *) &oInitMutex, TRUE);
        LOG_MSG("!!! SINGLETON LOCK OKAY !!!");
        static MyClass oMyClassInstance;
        LOG_MSG("!!! SINGLETON CONSTRUCTION OKAY !!!");
        return oMyClassInstance;
    }
    catch(...)
    {
        CString excMsg("Unexpected exception by creating MyClass singleton instance!");
        LOG_MSG(excMsg);
        throw excMsg;
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经想通了,单例对象的构造不会失败(因为我们得到了"!!! SINGLETON CONSTRUCTION OKAY !!!"消息).

日志输出说:

09.04.2013 ;07:14:51:832;"MyClass::singleton -> jump in"
09.04.2013 ;07:14:51:841;"!!! SINGLETON LOCK OKAY !!!"
... (constructor logs => NOTHING unexpected in it!!! everything runs …
Run Code Online (Sandbox Code Playgroud)

c++ singleton mfc mutex exception

1
推荐指数
1
解决办法
1050
查看次数

标签 统计

c++ ×1

exception ×1

mfc ×1

mutex ×1

singleton ×1