Почему в синглтоне проверьте class == null?

    static CMyStatic* myStatic = nullptr;


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

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

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

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

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

всегда делайте myStatic = new CMyStatic,

myStatic не работает, не так ли?

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

Я думаю, вы неправильно понимаете. Если бы у вас был static CMyStatic* myStatic = new CMyStatic, то он бы сконструировал его только один раз.

Tas 26.10.2018 04:43

Для потокобезопасного синглтона ознакомьтесь с синглтоном Myers stackoverflow.com/questions/17712001/…

Michael Surette 26.10.2018 04:45

Вместо этого я предпочитаю использовать статическую локальную переменную: CMyStatic* CMyStatic::getInstance(){ static CMyStatic myStatic; return & myStatic; }

Remy Lebeau 26.10.2018 05:05
1
3
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

Другие вопросы по теме