почему в синглтоне проверьте класс == ноль? - PullRequest
0 голосов
/ 26 октября 2018
    static CMyStatic* myStatic = nullptr;


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

если я создаю синглтон, в функции getInstance (),

проверяет, что указатель класса равен нулю.как этот код.

Я понимаю, что статический объект только создает один, не так ли?

тогда, если я не проверял myStatic == nullptr,

всегдаmake myStatic = new CMyStatic,

myStatic не делает, не так ли?

или мое понимание неверно?

1 Ответ

0 голосов
/ 26 октября 2018

Если вы всегда создаете новый CMyStatic, то любое состояние, находящееся у старого, теряется.Если вам не нужно поддерживать состояние, тогда вам на самом деле не нужен Singleton - просто класс с некоторыми статическими методами.

Путем проверки на нуль вы создаете один объект в первый раз, когда этонеобходимо, и с тех пор вы всегда используете один и тот же объект, который может сохранять некоторую информацию о состоянии между вызовами.

В некоторых случаях вам может потребоваться создавать объект постоянно, а не просто «по мере необходимости» - в этом случае вы можете обойтись без проверки на ноль, поскольку вы не ожидаете, что он когда-либо будет нулевым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...