Синглтон-паттерн в C ++ - PullRequest
       13

Синглтон-паттерн в C ++

4 голосов
/ 03 ноября 2010

Я новичок и немного невежественен в C ++, и я сталкиваюсь с кодом C ++, который использовал шаблон синглтона,

class CFoo
{
 public:
   static CFoo& getInstance()
   {
     static CFoo self;
     return self;
   }

 private:
   CFoo(){}
   ~CFoo(){}
};

Я просто запутался, зачем возвращать статическую ссылку? Это действительный код? Почему программист не использовал указатель?

Ответы [ 3 ]

7 голосов
/ 03 ноября 2010

Зачем использовать указатель? Ссылка проста и соответствует тому, что я хочу сделать: псевдоним объекта, а не указывать на него. static не относится к ссылке, она применяется к функции, что делает ее вызываемой без экземпляра.

(еще лучше, зачем использовать синглтон ?)

2 голосов
/ 03 ноября 2010

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

. Обратите внимание, что это getInstance, что является статическим в объявлении функции.Спецификаторы класса хранения недопустимы в типах возвращаемых функций.

Я бы предложил вам использовать Однотипный шаблон проектирования , если, конечно, не настоятельно рекомендуется использовать Singleton

1 голос
/ 03 ноября 2010

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

(*(CFoo::getInstance ())) == "comparison overloaded op"

против

CFoo::getInstance () == "comparison overloaded op"
...