Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
(Модератор:
Вад
) > Тема:
Реализация "Синглтона"
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Реализация "Синглтона" (Прочитано 11572 раз)
0 Пользователей и 1 Гость смотрят эту тему.
SSW
Гость
Реализация "Синглтона"
«
:
10-12-2004 12:07 »
Интересует как пример, сам Singleton сервер, и клиент которий бы с ним работал. (вне процессный).
Зарание спасибо.
Записан
baldr
Команда клуба
Offline
Пол:
Дорогие россияне
Реализация "Синглтона"
«
Ответ #1 :
10-12-2004 13:06 »
Код:
class myclass
{
private:
static myclass *_self;
myclass();
public:
static myclass* Instance() {
if (_self==NULL) _self=new myclass;
return _self;
}
};
myclass *myclass::_self=NULL;
«
Последнее редактирование: 03-12-2007 16:40 от Алексей1153++
»
Записан
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
SSW
Гость
Реализация "Синглтона"
«
Ответ #2 :
11-12-2004 10:22 »
Млин! Чето я не могу разобраться. Может примерчик есть ?
Записан
baldr
Команда клуба
Offline
Пол:
Дорогие россияне
Реализация "Синглтона"
«
Ответ #3 :
11-12-2004 10:34 »
Да чего тут разбираться... Просто получаешь ссылку на него так:
Код:
myclass* coolclass=NULL;
void mycoolfunction()
{
coolclass=myclass::Instance();
}
Вот так. И потом у тебя эта ссылка нормально работает. И в пределах области жизни статической переменной myclass::_self у тебя будет только один экземпляр класса myclass. 8)
«
Последнее редактирование: 03-12-2007 16:40 от Алексей1153++
»
Записан
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Serega
Гость
Реализация "Синглтона"
«
Ответ #4 :
12-12-2004 08:55 »
Насколько я понял интересует как это сделать в COM,
смотри с сторону CComObjectGlobal, если пишеш на ATL
либо как показал
baldr
, если CreateInstance пишеш сам
Записан
ysv_
Помогающий
Offline
Re: Реализация "Синглтона"
«
Ответ #5 :
24-12-2004 19:37 »
static myclass* Instance() {
if (_self==NULL) _self=new myclass;
return _self;
}
- а как насчет удаления _self?
Может лучше:
static myclass* Instance()
{
static myclass self;
return &self;
}
Тогда переменная _self - не нужна, и утечки памяти нет.
Записан
Serega
Гость
Re: Реализация "Синглтона"
«
Ответ #6 :
24-12-2004 23:47 »
Это вариант, но тут возникает другая проблема
если важна последовательность создания синглетонов то такая реализация не пойдет
как избежать утечки памяти и управлять временем жизни синглетонов написано у Александреску в Modern C++ Design
Записан
baldr
Команда клуба
Offline
Пол:
Дорогие россияне
Re: Реализация "Синглтона"
«
Ответ #7 :
25-12-2004 09:00 »
Сейчас не помню правильный способ, но очевидным кажется подсчет числа ссылок на объект.
Например, можно перегрузить оператор new и delete - и при каждом удалении уменьшать счетчик. При достижении нуля - удалять.
Записан
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
ysv_
Помогающий
Offline
Re: Реализация "Синглтона"
«
Ответ #8 :
26-12-2004 19:46 »
Цитата: Serega от 24-12-2004 23:47
Это вариант, но тут возникает другая проблема
если важна последовательность создания синглетонов то такая реализация не пойдет
Почему? Если важна последовательность создания, то надо обеспечить необходимую последовательность вызовов методов Instance соответствующих классов. А этого можно достичь, причем несколькими вариантами.
«
Последнее редактирование: 26-12-2004 19:48 от ysv_
»
Записан
Serega
Гость
Re: Реализация "Синглтона"
«
Ответ #9 :
26-12-2004 20:39 »
Статические переменные инициализируются так, как захочет компилятор (почти верно)
Поэтому не важно в какой последовательности ты вызываешь Instance
Записан
ysv_
Помогающий
Offline
Re: Реализация "Синглтона"
«
Ответ #10 :
29-12-2004 22:35 »
Пока что, во всех компиляторах, какими я пользовался статические переменные инициализируются при первом обращении к ним, т.е. при при первом вызове функции, в которой они объявлены. Подозреваю, что такое поведение гарантируется стандартом.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
(Модератор:
Вад
) > Тема:
Реализация "Синглтона"
Загружается...