|
27 / 27 / 16
Регистрация: 22.08.2017
Сообщений: 126
|
|
Зачем нам нужны синглтоны в С++?05.03.2018, 19:34. Показов 1969. Ответов 14
Метки нет (Все метки)
Добрый день.
Когда-то давно (лет 7 назад) читал я Александреску. И обратил внимание, что он много места уделял созданию синглтонов. То есть таких типов, чтобы объекты этого типа существовали в программе в единственном экземпляре. Вопросы: 1. А зачем нам вообще нужны такие объекты, которые существуют в программе в единственном экземпляре? 2. В чем проблема просто тупо создать объект указанного типа один раз в программе и больше не создавать объектов такого типа? 3. Статический член любого класса существует в программе в единственном экземпляре. Это проверяют транслятор и линкер и при попытке создать второй экземпляр статического члена класса выдается ошибка. Чем статический член любого класса не синглтон? Спасибо.
0
|
|
| 05.03.2018, 19:34 | |
|
Ответы с готовыми решениями:
14
Зачем нам заграница
А нужны ли нам web services? |
|
"C with Classes"
|
|||
| 05.03.2018, 19:45 | |||
|
0
|
|||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 05.03.2018, 19:53 | ||
|
Собственно синглтоны и реализуются на основе статических членов класса или локальных статических переменных статической функции класса.
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 05.03.2018, 20:07 | ||||
|
например: создание двух графических подсистем в одном приложении. то, чего быть не должно - не должно быть в принципе. киллер-фича сингелтона - защита руками компилятора, см. "сингелтон Майерса".
0
|
||||
|
Комп_Оратор)
|
|||
| 05.03.2018, 22:20 | |||
|
Кроме того: Любой молоток это инструмент, но не любой инструмент это молоток. Синглтон можно создать путём инициализации статического объекта, но не наоборот. Если вы создали статическую переменную типа int в программе или если хотите - в классе (хотя причём тут классы?), это не значит, что это будет единственный экземпляр типа int в программе. Если Вы хотели сказать, что жменя статических переменных и функций их использующих, прикрытые неймспейсом это альтернатива синглтону, то и тут Вы не правы. У класса есть возможность определять операторы - члены. И класс может быть шаблонным к тому же. То есть для каждой комбинации параметров-типов можно получить свой инстанс и только необходимости и там и тогда, где и когда потребуется.
0
|
|||
|
27 / 27 / 16
Регистрация: 22.08.2017
Сообщений: 126
|
||||||||||||
| 06.03.2018, 00:02 [ТС] | ||||||||||||
Это решается элементарно. Конструктор по умолчанию ничего не делает. И создается метод, который работает как конструктор. Когда данные для реального конструктора получены, вызывается этот метод. Типа как здесь:
Вобщем напишу пример синглтона на статическом члене класса, а то какое-то недопонимание получается. Пример не транслировал.
Попытка создания shell_singleton::singleton_var; приведет к ошибки компиляции или линковки. Не нужны никакие счетчики создания экземпляров класса. Все решается средствами компилятора и линкера. Вместе с тем, даже если создать экземпляр singleton, то работать с ним нельзя, так как все его методы приватные. Но это я перестраховался, проще пользователям не объявлять вообще о существовании класса singleton, пусть работают с классом shell_singleton.
1
|
||||||||||||
|
27 / 27 / 16
Регистрация: 22.08.2017
Сообщений: 126
|
||
| 07.03.2018, 05:27 [ТС] | ||
0
|
||
|
Комп_Оратор)
|
|||
| 07.03.2018, 08:09 | |||
0
|
|||
|
27 / 27 / 16
Регистрация: 22.08.2017
Сообщений: 126
|
|||
| 07.03.2018, 12:09 [ТС] | |||
|
Тут коллеги утверждают, что синглтон нужен для того, чтобы в БОЛЬШИХ приложениях СЛУЧАЙНО не создать второй экземпляр класса, который должен быть только в одном экземпляре. Но БОЛЬШИЕ приложения сейчас не делаются одним екзешником. БОЛЬШИЕ приложения сейчас состоят из многих DLL. Получается, что синглтон не защищает от СЛУЧАЙНОГО создания второго экземпляра класса в какой-то DLL, входящей в приложение, то есть и в приложении в целом. Получается, что синглтон не выполняет главного своего предназначения - автоматического запрета создания второго экземпляра синглтона. То есть все равно надо читать описание и отслеживать вручную, что во всех DLL, из которых состоит приложение, не создается второй экземпляр синглтона. То есть существование механизма DLL убивает идею синглтона. Во всяком случае декларированную идею об автоматическом запрете создание второго экземпляра класса синглтона в БОЛЬШИХ приложениях. Добавлено через 4 минуты
1
|
|||
|
"C with Classes"
|
|
| 07.03.2018, 12:30 | |
|
pepsicoca2, то что есть синглтон в одной длл не есть синглтон в другой, создание длл ради создания второго синглтона это ненужный хак.
0
|
|
|
Любитель чаепитий
|
||||
| 07.03.2018, 12:43 | ||||
|
желательно, чтобы в конструкторе синглтона был вывод в консоль того, что он родился. Добавлено через 10 минут
0
|
||||
|
27 / 27 / 16
Регистрация: 22.08.2017
Сообщений: 126
|
|
| 08.03.2018, 23:09 [ТС] | |
|
1
|
|
|
"C with Classes"
|
|
| 09.03.2018, 05:41 | |
|
0
|
|
| 09.03.2018, 05:41 | |
|
Помогаю со студенческими работами здесь
15
Нам космические инженеры не нужны. Мы ищем установщиков программного обеспечения Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить? Зачем нужны операторы << и >>
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
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 с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|