static CMyStatic* myStatic = nullptr;
CMyStatic* CMyStatic::getInstance(){
if (myStatic==nullptr)
myStatic = new CMyStatic;
return myStatic;
}
если я сделаю синглтон, в функции getInstance (),
указатель класса проверки равен нулю. как этот код.
Я понимаю, что статический объект создает только один, не так ли?
тогда, если я не проверял myStatic == nullptr,
всегда делайте myStatic = new CMyStatic,
myStatic не работает, не так ли?
или мое понимание неверно?
Для потокобезопасного синглтона ознакомьтесь с синглтоном Myers stackoverflow.com/questions/17712001/…
Вместо этого я предпочитаю использовать статическую локальную переменную: CMyStatic* CMyStatic::getInstance(){ static CMyStatic myStatic; return & myStatic; }
Если вы всегда создаете новый CMyStatic
, то любое состояние, удерживаемое старым, теряется. Если вам не нужно поддерживать состояние, тогда вам вообще не нужен синглтон - просто класс с некоторыми статическими методами.
Выполняя нулевую проверку, вы создаете один объект в первый раз, когда он нужен, и с этого момента вы всегда используете один и тот же объект, который может сохранять некоторую информацию о состоянии между вызовами.
В некоторых случаях вы можете захотеть создавать объект все время, а не просто «по мере необходимости» - в этом случае вы можете обойтись без проверки на null, потому что вы не ожидаете, что он когда-либо будет нулевым.
Я думаю, вы неправильно понимаете. Если бы у вас был
static CMyStatic* myStatic = new CMyStatic
, то он бы сконструировал его только один раз.