Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/26: Рейтинг темы: голосов - 26, средняя оценка - 4.88
97 / 11 / 1
Регистрация: 14.03.2017
Сообщений: 196

Синглтон и стиль написания кода (теория)

16.02.2020, 17:08. Показов 6318. Ответов 86
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем, тут диспут о правильном написании кода.

Я знаю что такое синглтон, для чего он нужен и как реализуется. Однако меня интересует, нужен ли он в самом деле или нет.
В своем движке я написал функции логгинга. Обернул это в namespace, так же обернул в макросы и был счастлив. В реализации другого движка я увидел, что он функции логгинга обернул через синглтон.
Так вот, объясните, если какие-нибудь плюсы у синглтона по сравнению с моим подходом или наоборот минусы моего подхода по сравнению с сингтоном.

З.Ы. Я в курсе, что синглтон - это антипаттерн.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.02.2020, 17:08
Ответы с готовыми решениями:

Стиль написания кода(читабельность и прочее)
Недавно делал тестовое задание для поиска работы, но мне сказали, что код не совсем корректно написан. Задание:Написать рекурсивный и не...

Стиль написания кода
Всем привет! Просматривал исходники Perl и обратил внимание на то, что стиль написания кода который представлен ниже, очень короткий по...

Стиль написания кода
Имеется внешний класс. Внутри этого внешнего класса объявлен private static класс. Клиенты внешнего класса не имеют представления о...

86
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
21.02.2020, 12:14
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от IGPIGP Посмотреть сообщение
Кроме того, неосторожность/глупость/злой умысел могут создать столько объектов сколько нужно.
Например, простая передача по значению создаст копию, которая уничтожится автоматически.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
22.02.2020, 01:04
Цитата Сообщение от IGPIGP Посмотреть сообщение
Время жизни - приложение и ни как не сменить или уничтожить.
Отнюдь. Вытираете ссылку (пишете в нее воид, нулл или что там, в зависимости от языка) и уничтожаете объект (или его убирает ГЦ, опять же, в зависимости от языка). Более того - чтобы не нарезать 100500 полей разных типов, достаточно нарезать одно - словарь ключ/значение, где значение это Object (в терминах джавы. в плюсах будет ссылка на воид наверное), и набиваете этот словарь значениями по нужным ключам и удаляете что не надо. И ветвите внутри иерархию словарей как хотите в динамике в рантайме, по определенным ключам кладучи другие подобные же словари.... Опыт динамических языков пролезает изо всех щелей
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
22.02.2020, 01:12
Цитата Сообщение от _Ivana Посмотреть сообщение
Отнюдь. Вытираете ссылку (пишете в нее воид, нулл или что там, в зависимости от языка) и уничтожаете объект (или его убирает ГЦ, опять же, в зависимости от языка).
_Ivana, мы тут о плюсах же говорим. Поле нельзя уничтожить. Если оно не содержит констант, ссылок... (не помню больше), то можно запустить деструктор и заселить поле размещающим new. Но выбор не велик.
Что же касается структуры, то синглтон может быть ветвист как олень. Если вспомнить Рассела, то он может быть деревом, содержащим все возможные деревья деревьев, не являющихся поддеревьями ни одного дерева. Деревьев. Так кажись...
1
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
22.02.2020, 01:21
Правильно. Но можно выселить объект из поля и очистить занимаемую им память, оставив в поле скромный маленький указатель в воид. И так много раз за время жизни приложения. Не говоря уже о словаре
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
22.02.2020, 01:32
Цитата Сообщение от _Ivana Посмотреть сообщение
Правильно. Но можно выселить объект из поля и очистить занимаемую им память, оставив в поле скромный маленький указатель в воид. И так много раз за время жизни приложения. Не говоря уже о словаре
Если поле - указатель, то можно. Но об этом была вторая часть:
Цитата Сообщение от IGPIGP Посмотреть сообщение
А если агрегация и закрытые копирующие функции то это синглтон с локальным скоупом. Тут есть профит от более определённого порядка инициализации для различных зависимых объектов.
агрегация это когда ссылка или указатель (время жизни объекта контролируется вручную). Тут можно из фабрики заcелить и не иметь вопросов с копированием и разрушением в неподходящий момент. То есть это остаётся синглтон, но с видимостью - класс Application (или другой владелец вложенный в main).
Первая часть, - это поле-значении. Его нельзя void'ануть. Стандарт говорит, что если объект разрущить то перезаселённый размещающим new объект с точки зрения стандарта - новый объект. Закон относительности плохих формулировок утверждает, что ни какими физическими/ментальными/эротическими опытами нельзя отличить друг от друга плохо дифференциируемые по определению понятия. То есть, невозможно ни когда сказать, является объект новым с точки зрения реинициализации или он таким был всегда. Но существенно не это занудство, а тот факт, что объект занимает память каким бы его не хотел считать стандарт.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
22.02.2020, 01:37
Ну я зря про словарь что-ли писал Создаете один словарь, а потом добавляете/удаляете в него сколько угодно полей-значений по ключам. И при удалении память, используемая для хранения этой пары ключ/значение, очищается.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
22.02.2020, 01:52
Цитата Сообщение от _Ivana Посмотреть сообщение
Ну я зря про словарь что-ли писал Создаете один словарь, а потом добавляете/удаляете в него сколько угодно полей-значений по ключам. И при удалении память, используемая для хранения этой пары ключ/значение, очищается.
Дык и я про деревья о том же. Для управления множеством синглтонов, есть более гибкие приёмы. Это может быть указатель на базовый класс, например. То есть, в рантайме можно подставлять различные реализации убивая старые. Дружественный метод убьёт кого хошь. А может быть времени компиляции полиморфный фрукт (на шаблонах вплоть до CRTP ). А может быть и комбинация (не одна). Варианты есть. Важно то, как организован сам фасад. Он синглтон или он не синглтон? В конце концов, это по сути - просто объект класса. Если ни кому не нужны его свойства, то можно и без него.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.02.2020, 01:52
Помогаю со студенческими работами здесь

Стиль написания кода. Отступы
Что лучше: проблелы или табуляция? Ибо поначалу я слышал и был уверен что лучше использвать табуляцию. Но сейчас используя sublime text c...

Оцените на правильность кода и общий стиль написания
Приветствую всех :) В кои-то веки решил начать изучать Java, наткнулся на некий курс, в котором подробно разбирается MVC, а параллельно...

Синглтон вызывает синглтон
Привет. Что-то запутался. Есть Синглтон(надеюсь я его правильно сделал): public class Table extends JTable { private static...

Правила написания кода
Всем привет!Читала о правильном написании кода, отступы, что был "елочкой", но до меня так и не дошло, как это на практике делается. Буду...

Правила написания кода
Я вот до сих пор не понимаю, как происходит такая вещь. Допустим: у меня есть Главная страница сайта <b>index.php</b> и есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
87
Ответ Создать тему
Новые блоги и статьи
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru