C++检查单例指针

its*_*me1 3 c++ singleton qt

我有一个应用程序,它有一个(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();

在这种情况下,我丑陋的解决方法不起作用,因为它需要为每个方法单独的宏.我有什么提示可以改进吗?

谢谢你的回答.

Pup*_*ppy 9

不要使用可怕的设计模式 - >不要遇到问题.通常,人们使用更类似的东西

Logger& Logger::GetInstance() {
    static Logger instance; 
    return instance;
}
Run Code Online (Sandbox Code Playgroud)

但单身人士模式一般都非常糟糕.请改用应用程序实例模式.

  • +1:我不明白为什么每个人都想使用这种糟糕的单身模式. (3认同)
  • @InsertNickHere:单例是一种糟糕的设计模式,因为当你遇到线程之类的东西时,你会遇到各种各样的问题,如果你像其他聪明人一样创建一个应用程序实例,那么完全不需要它。 (2认同)
  • 我不想做出一个明确的声明,并说单身人士永远不会有用 - 但我从来没有遇到过有用的情况,但我遇到了所有常用的例子,作为单身人士有用的例子. (2认同)