为什么在单例中检查class == null?

时间:2018-10-26 02:27:38

标签: c++ design-patterns singleton

    static CMyStatic* myStatic = nullptr;


    CMyStatic* CMyStatic::getInstance(){
        if(myStatic==nullptr)
                myStatic = new CMyStatic;
        return myStatic;
    }

如果我在getInstance()函数中创建单例,

检查类指针为空。像这样的代码。

我知道静态对象只能制作一个,不是吗?

然后,如果我没有检查myStatic == nullptr,

始终使myStatic =新的CMyStatic,

myStatic没有制作,不是吗?

还是我的理解是错误的?

1 个答案:

答案 0 :(得分:2)

如果您总是创建一个新的CMyStatic,那么旧状态所拥有的任何状态都会丢失。如果您不需要维护状态,那么您根本就不需要单例-仅是带有一些静态方法的类。

通过执行空检查,您将在第一次需要时创建一个对象,从那时起,您将始终使用同一对象,该对象可以在两次调用之间保留一些状态信息。

在某些情况下,您可能希望一直创建对象,而不仅仅是“按需”创建对象-在这种情况下,您可以不使用null检查而逃脱,因为您不希望它永远为null。