"Примеры использования Паттерн Singleton (Одиночка)" - читать интересную книгу автора (Федоров Дмитрий)

Комментарии: 

Как бы так это заделать???

Во первых, статья очень хорошая и полезная, спасибо. Применил в реальной программе я этот сингелтон и остался очень доволен. Но мне надо было несколько изменить поведение исходного класса. У меня ситуация такая: есть клиент, который шлёт запросы на сервер, на сервере есть класс, который создаёт и хранит необходимые для обработки этих запросов таблицы. Но беда в том, что после обработки очередного запроса мне не надо уничтожать объект, т.к. эти запросы идут сериями по многу штук подряд, а удалять объект надо в конце серии... Я сделал во что:


template lt;class Tgt;

T*  Singletonlt;Tgt;::Instance()

{

  if(!_self)

  {

    _self=new T;

    _refcount++; // вот это

  }

  _refcount++;

  return _self;

}


Но выглядит на мой взгляд коряво. Может есть какие-то паттерны на этот случай?

Ну, в довесок хочу воткнуть так вот полу-смарт указатель:


templatelt;class Tgt;

class TSingeltonPtr

{

  T *_t;

public:

  TSingeltonPtr() { _t = T::Instance(); }

  ~TSingeltonPtr() { if(_t) _t-gt;FreeInst(); }

  operator T*() { return _t; }

  T* operator-gt;() { return _t; }

  bool operator!() const { return _t==0; }

};


использование:


class Derived : public Singletonlt;Derivedgt;

{

void foo();

...

};

void bar()

{

  TSingeltonPtrlt;Derivedgt; sp;

  if ( !sp ) return;

  sp-gt;foo();

}

konst 11.12.2002 19:17
Маленькое замечание 

Все таки непонятно, откуда пошла дурацкая мода в с++ коде давать данным-членам класса символ подчеркивания в качестве префикса? То есть, и так ясно откуда...

Но ведь c++ не java... Например на MCVC++ код с такими префиксами не компилируется иногда. Ведь сказано же, зарезервировано под надобности компиляторов. Или это специально так отформатировано, чтобы читать было красивее? ;)


А статья действительно хорошая, удивило то что почти не пересекается с [3] ;)

Пересыпкин Михаил Алексеевич 3.12.2002 16:39
зачем возвращать указатель?

Еще хочу добавить: почему Instance() возвращает указатель а не ссылку? Тогда и путаницы с delete не будет!

Sergeem 19.11.2002 12:56
взаимодействие синглтонов 

Интересно обсудить эту тему.

Например у меня есть синглтон - менеджер памяти, синглтон - БД-клиент, и т.д.

Тогда менеджер памяти должен "уходить" последним, поскольку другие с-тоны могут освобождать память в своих деструкторах. Интересный вариант есть в loki. Я реалиовал свою модель. феслт кому интересно, могу поделиться или обсудить где-нить в С++ форуме. 

Sergeem 19.11.2002 12:52