|
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
|
||||||
Паттерн Singleton14.09.2014, 22:41. Показов 3988. Ответов 22
Метки нет (Все метки)
Мне вот дали такой код как паттерн Singleton:
не все я там понял, но суть в том, что там "немного не так". Собственно вопрос: Суть паттерна одиночки в выше указанном коде, сохраняется? Или все таки есть какая та разница? Добавлено через 47 минут Вроде вопрос легкий)
0
|
||||||
| 14.09.2014, 22:41 | |
|
Ответы с готовыми решениями:
22
Паттерн Singleton
Что значит Singleton& operator = ( Singleton& )? |
|
Ушел с форума
|
||||||||||||||
| 14.09.2014, 22:48 | ||||||||||||||
|
Если это и singleton, то какой-то очень корявый:
1.
2.
3. Класс не потокобезопасен (для синглтона это бывает важно). 4. Про мелочи типа "stdafx.h" и использования cout вообще молчу. Резюме: на помоечку. Добавлено через 19 секунд
0
|
||||||||||||||
|
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
|
|
| 14.09.2014, 22:56 | |
|
Здравствуйте, в данном случае используется шаблонный класс, позволяющий сгенерировать синглтон для переданного в качестве параметра шаблона класса. При этом сам по себе класс SingletonS не является синглтоном, т.к. публичный конструктор позволяет создавать любое число копий этого класса. Он обеспечивает внутри себя создание только одной копии класса T - при условии (++m_nCount == 1), и удалении этой копии при (--m_nCount == 0). Это можно назвать вариацией на тему синглтона который поддерживает некоторый инвариант поведения( не более одной копии T созданной при помощи класса SingletonS<T> в программе), сходный с описываемым паттерном синглтон, но не более. T может иметь публичный конструктор - и создавай сколько влезет. SingletonS<T> можно создать, удалить, потом снова создать - будет создана новая копия T. Кроме того конструктор копирования и оператор присваивания не прикрыты в этой реализации - что приведет к интересным последствиям.
0
|
|
|
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
|
||
| 15.09.2014, 00:24 [ТС] | ||
|
0
|
||
|
И целого heap'а мало
96 / 57 / 17
Регистрация: 31.07.2014
Сообщений: 291
|
||
| 15.09.2014, 00:51 | ||
|
Не по теме: Эффект Синглтона. Неплохое название для триллера или мальчуковой группы. Ещё, как заметил товарищ Убежденный, ваше оно это не потокобезопасно. Как исправить: 1. Сделать конструктор private или protected, если захотите наследоваться; 2. Для потокобезопастности ввести проверки (double-checked locking) или исхитриться со статичностью (lazy initialization). О, а после всего этого вашего того... забыть про этот паттерн. Это же глобальные переменные только в ОО стиле. Админь.
0
|
||
|
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
|
|||||
| 15.09.2014, 01:24 [ТС] | |||||
|
Добавлено через 2 минуты
0
|
|||||
|
|
||||||||||||
| 15.09.2014, 01:25 | ||||||||||||
0
|
||||||||||||
|
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
|
|
| 15.09.2014, 01:28 [ТС] | |
|
0
|
|
|
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
|
||
| 15.09.2014, 01:55 [ТС] | ||
|
Добавлено через 9 минут Вообщем, напишите плс нормальный Singleton, если не сложно. Или киньте ссылку на него.
0
|
||
|
И целого heap'а мало
96 / 57 / 17
Регистрация: 31.07.2014
Сообщений: 291
|
|||||||||||||||||
| 15.09.2014, 02:31 | |||||||||||||||||
|
Вот наклепал на скорую руку Lazy Initialized Singleton (все обязательно с бошой буквы).
Как известно (ой тут местные гуру могут избить меня тапками) статические переменные находятся в data segment, но не инициализированны. Инициализируются они при первом вызове функции/метода, куда они впихнуты. При потере области видимости (выходе из функции) они не теряются как переменные на стэке, а продолжают жить пока программа не закончится.
Суть в чём: стандартная проверка на существование в синглтоне показывает, что инстанса нет, значит, можно создать. Ан нет! Если дело вертится в нескольких потоках, все несколько иначе. После проверки на существование инстанса, другой поток может также выполнить эту проверку. Оба увидят, инстансов нет. И вот два инстанса. Паттерн сломан.
Ну и ленивый синглтон напоточте, если интересно. Добавлено через 2 минуты
0
|
|||||||||||||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|
| 15.09.2014, 08:33 | |
|
Andrej, кстати с С++11 необходимость в Double-checked locking отпала (в Meyer's singleton) из-за гарантий стандарта насчет инициализации статических переменных.
0
|
|
|
3 / 3 / 0
Регистрация: 26.06.2014
Сообщений: 37
|
||
| 15.09.2014, 11:21 | ||
|
0
|
||
|
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
|
|
| 15.09.2014, 12:40 [ТС] | |
|
0
|
|
|
И целого heap'а мало
96 / 57 / 17
Регистрация: 31.07.2014
Сообщений: 291
|
|
| 15.09.2014, 13:48 | |
|
0
|
|
|
3 / 3 / 0
Регистрация: 26.06.2014
Сообщений: 37
|
|
| 15.09.2014, 14:51 | |
|
0
|
|
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
||
| 15.09.2014, 15:58 | ||
|
0
|
||
|
И целого heap'а мало
96 / 57 / 17
Регистрация: 31.07.2014
Сообщений: 291
|
|
| 15.09.2014, 16:19 | |
|
0
|
|
| 15.09.2014, 16:19 | |
|
Помогаю со студенческими работами здесь
20
Singleton и DLL Реализация Singleton Singleton и MVC
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|