我有一个应用程序,它有一个(Qt C++)单例记录器类.GetInstance()实现是:
if(m_Instance == NULL)
{
try
{
m_Instance = new Logger();
}
catch(...){}
}
return m_Instance;
Run Code Online (Sandbox Code Playgroud)
现在我在.h文件中有以下宏:"#define LOG logger :: Instance() - > Log"
只要new()操作有效,一切都很好.确保指针设置的最佳方法是什么(我正在考虑一些try-catch块来捕获std :: bad_alloc,但我不知道如何在宏中实现它)?我已经创建了一个解决方法,它似乎有效但不漂亮:
"#define LOG if(Logger :: Instance())Logger :: Instance() - > Log"
另外,我想知道如果我的对象有很多getter/setter(例如setPath(),getSize()...)?目前,我有一个宏:
"#define SET Settings :: Instance()"
在代码中我可以使用SET-> setPath("abc"); 或者SET-> getSize();
在这种情况下,我丑陋的解决方法不起作用,因为它需要为每个方法单独的宏.我有什么提示可以改进吗?
谢谢你的回答.
不要使用可怕的设计模式 - >不要遇到问题.通常,人们使用更类似的东西
Logger& Logger::GetInstance() {
static Logger instance;
return instance;
}
Run Code Online (Sandbox Code Playgroud)
但单身人士模式一般都非常糟糕.请改用应用程序实例模式.