Kartonagnick
> основная и достаточная.
не уверен.
У синглтона две стороны: первая это невозможность создать второй экземпляр, а вторая - возможность получить к экземпляру доступ откуда угодно (без необходимости прокидывать его через параметры функции).
И именно вторая сторона обычно нужна - всякие логгеры, конфигураторы и прочие синглтоны в реальных программах. Кому в здравом уме придет идея создавать второй объект конфигурации или логгер? А даже если и придет - что в этом плохого?
Что на самом деле нужно - чтобы можно было выводить в лог и учитывать параметры конфигурации не передавая объекты в явном виде.
Вполне можно придумать "синглтон" который можно будет создать только один раз (да просто assert добавить в конструктор), но без собственно статического getInstance он будет никому не нужен.
Казалось бы, люди должны быть склонны прощать другим те грехи, которыми обладают сами. По типу - "да ладно, не страшно, даже я сам иногда делаю так же".
Но вот в интернете уже не первый раз замечаю как раз строго обратную ситуацию - человек обвиняет меня в каком-то недостатке, при этом сам же являясь жирнейшим представителем. Я предполагаю, что это такой побочный эффект от недостаточного осознавания того факта, что разные люди могут мыслить по-разному - пытаясь понять мою мотивацию, они подставляют самих себя, видят, как совершают в этой ситуации какую-нибудь нехорошую вещь, и, соответственно, начинают думать, что я в этой же ситуации именно эту нехорошую вещь и делаю. Разумеется, при этом совершенно упуская из головы тот факт, что этот человек и я - это два разных человека, о моей ситуации они совершенно ничего не знают, и моё отношение к жизни может быть совершенно другое.
Наверно, разница происходит оттого, что, поскольку в интернете никто никого не знает и на дуэль не вызывает, то и желание оправдать самого себя оказывается приглушённым - тогда как в личной беседе человек бы подумал "а вдруг потом за то же самое накажут меня самого?", и стал бы занижать серьёзность этого недостатка; в интернете этой мысли не возникает и обвинения идут в полную нефильтрованную силу.
Чтобы не показывать на людей пальцами, о прошлых случаях рассказывать не буду.
Но скажу, что на этот раз, очень много обвинений стало исходить от Картонажника - как по поводу профессиональной квалификации, так и по личностным качествам.
kipar
> И именно вторая сторона обычно нужна
ещё один.
откуда вы только такие беретесь?
если тебе просто нужна глобальная точка доступа,
то возьми обычную глобальную переменную.
синглетон для этого не нужен.
kipar
> Кому в здравом уме придет идея создавать второй объект конфигурации или логгер?
> А даже если и придет - что в этом плохого?
что-то подобное уже было.
не задолго до чернобыльской.
мне лень по новому кругу писать одно и тоже.
о взаимосвязи "гарантий" и "здравого смысла"
я подробно уже расписал несколько страничек назад.
Kartonagnick
Повторю, у синглтона две стороны. Если убрать глобальную точку доступа (и оставить гарантию единственного создания) - это не синглтон.
kipar
> У синглтона две стороны: первая это невозможность создать второй экземпляр, а
> вторая - возможность получить к экземпляру доступ откуда угодно
У синглтона есть еще одна важная особенность - он должен создавать экземпляр. И вот тут отбитые крестовики упускают из виду один важный момент, в си отсутствует такая привычная для них штука, как RAII. Поэтому переменные перед использованием сами себя не проинициализируют.
kipar
> но без собственно статического getInstance он будет никому не нужен.
рассмотрим дешман времен с++03
// some.cpp namespace // <—- собственность ед. трансляции { struct { int ololo; } singleton; // <—- у структуры нет имени } ... void blablabla() { singleton.ololo; // <—- только для местных }
объект безымяной структуры - это такой способ дешево и сердито
замутить синглетон.
у него есть свои проблемы, свои противопоказания.
зато он оч легко изготавливается.
важно два момента, на которые я хочу обратить твоё внимание:
1. getInstance - это особенность реализации одной конкретной модели.
есть и другие модели, которые прекрасно обходятся без него.
2. как правило, область видимости синглетона ограничивается файлом.
а вот глобальный синглетон, как правило, как раз таки не нужен.
gudleifr
Ты не в тренде, сейчас модно вот так
kipar
> Повторю, у синглтона две стороны. Если убрать глобальную точку доступа (и
> оставить гарантию единственного создания) - это не синглтон.
нет, это будет сингелтон.
просто с ограниченной областью видимости.
а вот если решишь убрать гарантии единственности экземпляра,
вот тогда возникнет резонный вопрос:
а нафига он тебе такой вообще тогда нужен?
totoro
> сейчас модно вот так
Какие-то странные. Как бы я их там сортировал-то? Мне завтра на работу!! (c)
totoro
> Поэтому переменные перед использованием сами себя не проинициализируют.
1. в с/с++ не_локальные статические объекты
всегда инициализируются
(по умолчанию - нулем)
2. в с/с++ поддерживается агрегатная инициализация.
totoro
> Кстати static initialization order fiasco там отсутствует именно по этой
> причине.
нет, не по этой.
Kartonagnick
> мне лень по новому кругу писать одно и тоже.
> о взаимосвязи "гарантий" и "здравого смысла"
Кстати можно было бы еще подискутировать по этому поводу т.к. не все гарантии одинаково полезны, здравый смысл все-таки нельзя полностью исключать. В качестве примера достаточно вспомнить драму вокруг Actix web.
totoro
> Кстати можно было бы еще подискутировать по этому поводу т.к. не все гарантии
> одинаково полезны,
ты за балаболку ответь сначала.
Kartonagnick
> затея - фуфо
Лаконично, всего двумя словами, ты обрисовал факт своего присутствия на этом форуме.
> в тех краях, откуда я родом
Ты же вроде из Москвы. В этом городе, если вглядеться в лица, то можно не только края увидеть, но и берега, барханы и даже джунгли. Вот только интересно - всему этому "ццо" и словарному запасу гопника рядом с какой станцией метро учат?
Delfigamer
> который за голый хер подставляет других людей
Слышишь, геймер, оно решило, что тебя подставили.
Тема в архиве.