static CMyStatic* myStatic = nullptr;
CMyStatic* CMyStatic::getInstance(){
if(myStatic==nullptr)
myStatic = new CMyStatic;
return myStatic;
}
如果我在getInstance()函数中创建单例,
检查类指针为空。像这样的代码。
我知道静态对象只能制作一个,不是吗?
然后,如果我没有检查myStatic == nullptr,
始终使myStatic =新的CMyStatic,
myStatic没有制作,不是吗?
还是我的理解是错误的?
答案 0 :(得分:2)
如果您总是创建一个新的CMyStatic
,那么旧状态所拥有的任何状态都会丢失。如果您不需要维护状态,那么您根本就不需要单例-仅是带有一些静态方法的类。
通过执行空检查,您将在第一次需要时创建一个对象,从那时起,您将始终使用同一对象,该对象可以在两次调用之间保留一些状态信息。
在某些情况下,您可能希望一直创建对象,而不仅仅是“按需”创建对象-在这种情况下,您可以不使用null检查而逃脱,因为您不希望它永远为null。