我实际上面临一个巨大的问题:我有一个单例课程。我的程序是一个多线程的MFC,所以可以从不同的线程调用单例的构造函数。我用互斥锁包围了单例实例获取函数,以避免死锁和多重构造。下面的意思是函数的调用在第一次直接失败。
该函数看起来像(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;
}
}
我发现,单例对象的构造不会失败(因为我们得到“!!!单例构造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 fine, as they must!!!)
09.04.2013 ;07:14:52:125;"!!! SINGLETON CONSTRUCTION OKAY !!!"
09.04.2013 ;07:14:52:170;"Unexpected exception by creating MyClass singleton instance!"
这是什么意思?return语句什么时候会抛出异常???请帮我解决这个问题...