我有一个单例(我知道这是一个不好的模式)。为了控制清洁过程,我使用了一个共享指针。相关的代码是:当应用程序正在完成时未处理的异常
#ifndef _GLOBAL_LOG_H_
#define _GLOBAL_LOG_H_
namespace glog{
class CGlobalLog;
typedef boost::shared_ptr<CGlobalLog> globalLogPtr;
class CGlobalLog
{
private:
static globalLogPtr m_instance;
LogLevel minimiumLogLevel;
CGlobalLog(void);
static void deleter(CGlobalLog *ptr){
try{
delete ptr;
}
catch(std:: e)
{
std::cout << e.what() << "\n";
}
}
static void create() { m_instance.reset(new CGlobalLog, &CGlobalLog::deleter); }
void addMessage_(const std::string& appender, LogLevel level /*= LOGLEVEL_INFO*/,const char* msg, va_list args);
~CGlobalLog(void);
public:
static globalLogPtr& getInstance();
void addMessage(const std::string& message, std::string appender, LogLevel level = LOGLEVEL_INFO);
};
globalLogPtr CGlobalLog::m_instance;
};
#endif // _GLOBAL_LOG_H_
程序工作正常,但是当节目结束,未处理的异常在这一点上抛出:
static void deleter(CGlobalLog *ptr){
try{
delete ptr; //<-- Unhandled exception
}
catch(std:: e)
{
std::cout << e.what() << "\n";
}
}
渔获不捕获异常,所以我不要”不知道如何处理我的错误。错误被抛出的确切代码是一个boost库文件checked_delete.hpp,在这里:
// verify that types are complete for increased safety
template<class T> inline void checked_delete(T * x)
{
// intentionally complex - simplification causes regressions
typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
(void) sizeof(type_must_be_complete);
delete x;
}
我该如何找到这个错误?一些想法?
谢谢!
为什么你有一个自定义删除? –
这条线是什么意思? catch(std :: e)' –
以及为什么你从getInstance返回_reference_到std :: shared_ptr? –