我有一個單例(我知道這是一個不好的模式)。爲了控制清潔過程,我使用了一個共享指針。相關的代碼是:當應用程序正在完成時未處理的異常
#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? –