Комментарии:
Комментарии:
Как бы так это заделать???
Во первых, статья очень хорошая и полезная, спасибо. Применил в реальной программе я этот сингелтон и остался очень доволен. Но мне надо было несколько изменить поведение исходного класса. У меня ситуация такая: есть клиент, который шлёт запросы на сервер, на сервере есть класс, который создаёт и хранит необходимые для обработки этих запросов таблицы. Но беда в том, что после обработки очередного запроса мне не надо уничтожать объект, т.к. эти запросы идут сериями по многу штук подряд, а удалять объект надо в конце серии... Я сделал во что:
template <class T>
T* Singleton<T>::Instance()
{
if(!_self)
{
_self=new T;
_refcount++; // вот это
}
_refcount++;
return _self;
}
Но выглядит на мой взгляд коряво. Может есть какие-то паттерны на этот случай?
Ну, в довесок хочу воткнуть так вот полу-смарт указатель:
template<class T>
class TSingeltonPtr
{
T *_t;
public:
TSingeltonPtr() { _t = T::Instance(); }
~TSingeltonPtr() { if(_t) _t->FreeInst(); }
operator T*() { return _t; }
T* operator->() { return _t; }
bool operator!() const { return _t==0; }
};
использование:
class Derived : public Singleton<Derived>
{
void foo();
...
};
void bar()
{
TSingeltonPtr<Derived> sp;
if ( !sp ) return;
sp->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
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Комментарии
Комментарии Напоследок рассмотрим одну очень важную возможность HTML, которая, хоть и не касается напрямую Web-дизайна, но сильно поможет забывчивым Web- дизайнерам.Комментарий — это фрагмент HTML-кода, который не выводится на Web- страницу и вообще не обрабатывается
Комментарии CSS
Комментарии CSS В главе 2 мы узнали о комментариях — особых фрагментах HTML-кода, которые не обрабатываются Web-обозревателем и служат для того, чтобы Web-дизайнер смог оставить какие-то заметки для себя или своих коллег. Для этого язык HTML предоставляет специальный
Комментарии:
Комментарии: Как бы так это заделать??? Во первых, статья очень хорошая и полезная, спасибо. Применил в реальной программе я этот сингелтон и остался очень доволен. Но мне надо было несколько изменить поведение исходного класса. У меня ситуация такая: есть клиент, который
Комментарии:
Комментарии: template‹class TRet, class TP1› class CDelegate1 { //… }; template‹class TP1› class CDelegate1‹bool, TP1› { //… }; template‹class TRet, class TP1, class TP2› class CDelegate2 { //… }; template‹class TP1, class TP2› class CDelegate2‹bool, TP1, TP2› { //… }; и т.д… Андрей 20.3.2003 12:22 ... и статической T не надо А мне как то больше понравился такой
Комментарии
Комментарии Вплоть до этого времени я тщательно избегал темы комментариев. Вы могли бы подумать, что это будет простая тема... в конце концов компилятор совсем не должен иметь дела с комментариями; он просто должен игнорировать их. Чтож, иногда это так.Насколько простыми
21. Комментарии в СИ++
21. Комментарии в СИ++ Часто бывает необходимо вставлять в программу текст, который используется в качестве комментария только для читающего программу человека и не учитывается компилятором в программе. В C++ это возможно осуществить одним из двух способов. Символы /*
R.2.2 Комментарии
R.2.2 Комментарии Символы /* начинают комментарий, который завершается символами */. Такие комментарии не могут быть вложенными. Символы // начинают комментарий, который завершается концом этой строки. Символы //, /* и */ не имеют специального назначения в комментарии // и
Комментарии
Комментарии Комментарии помогают сделать ваш код более читабельным. Они не влияют на то, что выводит программа. Они написаны специально для того, чтобы вы их прочли. Все комментарии в Bash начинаются с хэш-символа #, за исключением первой строки (#!/bin/bash), имеющей специальное
Комментарии
Комментарии Комментарии — это фрагменты исходного текста программы, которые не компилируются и служат для пояснения кода. Для обозначения комментариев в программах на языке Object Pascal используют следующие конструкции:• // — комментарии в одной строке;• { } или (* *) —
Комментарии:
Комментарии: наследование операторов ›Дело в том, что в языке C++ операторы не наследуются. Это не верно по крайней мере для MSVC++. Более того этот метод используется при написании функтора из библиотеки Loki http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport (файл Functor.h), см. также
Комментарии
Комментарии Это правило выглядит достаточно просто:----Правило № 3. Помещайте в код комментарии. Объясняйте ваши допущения (более того, проверяйте их с помощью утверждений). Описывайте сложные блоки кода. При изменении кода изменяйте и соответствующие комментарии. Не
Комментарии
Комментарии Комментарий — это последовательность символов, которая воспринимается компилятором языка Си как отдельный пробельный символ и игнорируется. Комментарий имеет следующий вид:/* <символы> */<символы> должны принадлежать множеству представимых символов.
Комментарии:
Комментарии: Небольшое добавление Искал способ попроще включить поддержку ToolTips без явного использования класса CToolTipCtrl. И в результате сам сделал следующее: int CContentWnd::OnToolHitTest(CPoint point, TOOLINFO* pTI) const { int nHit=0; CString csText; csText="Закрыть окно"; HWND m_hWnd=this->GetSafeHwnd(); pTI->hwnd =
Комментарии:
Комментарии: Не всегда корректный код Вы приводите указатель на функцию-член класса клиента к указателю на функцию из конкрентного класса (slot::Thunk), это для некоторых классов может быть невозможно, ошибка компилятора, что-то типа "указатели имеют разную природу",
1.2 Комментарии
1.2 Комментарии Часто бывает полезно вставлять в программу текст, который предназначается в качестве комментария только для читающего программу человека и игнорируется компилятором в программе. В С++ это можно сделать одним из двух способов.Символы /* начинают
2.1 Комментарии
2.1 Комментарии Символы /* задают начало комментария, заканчивающегося символами */. Комментарии не могут быть вложенными. Символы / / начинают комментарий, который заканчивается в конце строки, на которой они