test
От: Аноним  
Дата: 25.10.09 16:48
Оценка:
Уважаемые, подскажите, почему не работает:

class Logger
{
private:
  QStringList list_;

  Logger();

public:

  static Logger instance() { static Logger logger; return logger; }

  void reset() { instance().list_.clear(); }
  void add(QString item) { instance().list_.append(item); }
  QStringList get() { return instance().list_; }

};

...

Logger::instance().add("vvvv");
cout << Logger::instance().get().size();


0



Это не реальный синглетон, а просто учебный пример, объясните, почему list_ должен быть static, чтобы работало правильно.
singleton
Re: test
От: MT-Wizard Украина  
Дата: 25.10.09 16:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Уважаемые, подскажите, почему не работает:


А> ...


А>Это не реальный синглетон, а просто учебный пример, объясните, почему list_ должен быть static, чтобы работало правильно.


Закрой конструктор копирования и оператор присвоения — поймёшь
А ти, москалику, вже приїхав (с)
Re: test
От: Анатолий Широков СССР  
Дата: 25.10.09 17:59
Оценка: +2
Проблема в том, что instance каждый раз возвращает новый объект, являющийся копией статического logger.
Очевидно, что вы ошиблись в возвращаемом типе instance. Надо просто вернуть ссылку:
static Logger& instance()
Re[2]: test
От: Nik_1 Россия  
Дата: 26.10.09 13:28
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

АШ>Проблема в том, что instance каждый раз возвращает новый объект, являющийся копией статического logger.

АШ>Очевидно, что вы ошиблись в возвращаемом типе instance. Надо просто вернуть ссылку:
АШ>
АШ>static Logger& instance()
АШ>

Кстати интересно, разрешено ли стандартом возврашать ссылки на статические локальные переменные.
Re[3]: test
От: Sergey Россия  
Дата: 26.10.09 13:32
Оценка:
Здравствуйте, Nik_1, Вы писали:

АШ>>Проблема в том, что instance каждый раз возвращает новый объект, являющийся копией статического logger.

АШ>>Очевидно, что вы ошиблись в возвращаемом типе instance. Надо просто вернуть ссылку:
АШ>>
АШ>>static Logger& instance()
АШ>>

N_>Кстати интересно, разрешено ли стандартом возврашать ссылки на статические локальные переменные.

Не запрещено
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[4]: test
От: Roman Odaisky Украина  
Дата: 26.10.09 13:41
Оценка:
Здравствуйте, Sergey, Вы писали:

N_>>Кстати интересно, разрешено ли стандартом возврашать ссылки на статические локальные переменные.

S>Не запрещено :)

Можно и на нестатические :-) — только это UB.
До последнего не верил в пирамиду Лебедева.
Re[5]: test
От: Alexander G Украина  
Дата: 26.10.09 13:47
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>Можно и на нестатические — только это UB.


Насколько я понимаю, запрещено использовать. А возвращать не запрещено!
Русский военный корабль идёт ко дну!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.