Почему GitHub C++ Core Guideline говорит, что глобальный объект лучше, чем синглтон?


person αλεχολυτ    schedule 09.11.2015    source источник
comment
Случайные рекомендации из Интернета стоят не больше, чем объяснение/обоснование, которое они включают. В данном случае его нет, так что это бесполезно. С такой же вероятностью вы найдете и другие рекомендации, говорящие об обратном. Если вам нужны аргументированные аргументы по конкретному вопросу, например, когда лучше использовать синглтон, а не глобальный объект или наоборот, лучше всего задать его напрямую.   -  person Tony Delroy    schedule 09.11.2015
comment
Посмотри снова. В нем говорится, что как исключение из правила против глобальных переменных, озаглавленного «Избегайте неконстантных глобальных переменных». Не вырывайте вещи из контекста.   -  person user207421    schedule 09.11.2015
comment
@TonyD Это не случайно, потому что предложено Страуструпом.   -  person αλεχολυτ    schedule 09.11.2015
comment
@TonyD, но... но... авторы...   -  person SingerOfTheFall    schedule 09.11.2015
comment
@alexolut Так что спросите Страуструпа. А смысл тут спрашивать? Бьерн член?   -  person user207421    schedule 09.11.2015


Ответы (1)


Это причина, по которой следует избегать синглтонов из одной коллекции рекомендаций:

I.3: Избегайте синглетонов

Причина

Синглтоны — это, по сути, сложные замаскированные глобальные объекты.

Пример

class Singleton {
    // ... lots of stuff to ensure that only one Singleton object is created,
    // that it is initialized properly, etc.
};

Существует множество вариантов идеи синглтона. Это часть проблемы.

Мой анализ намерений автора:

Чем проще, тем лучше. Если маскировка глобальных объектов в одиночках не решает проблем глобальных объектов, как следует из приведенного выше руководства, то нет смысла усложнять код с помощью маскировки.

person eerorika    schedule 09.11.2015
comment
И синглтон, и глобальный объект плохи. Но почему авторы рекомендуют использовать глобальный объект вместо синглтона? Вот в чем вопрос. - person αλεχολυτ; 09.11.2015
comment
@alexolut это просто вопрос предпочтений, глобальные переменные не так уж плохи и могут быть полезны в некоторых местах. просто с ними трудно справиться - person Ankit Acharya; 09.11.2015
comment
@alexolut в цитируемом руководстве говорится, что синглтоны являются замаскированными глобальными объектами. Я бы сделал вывод, что это означает, что они не решают проблемы глобальных объектов. В нем также говорится, что синглтоны сложнее, чем глобальные объекты. Чем проще, тем лучше. - person eerorika; 09.11.2015
comment
И если вы прочитаете Исключение из руководства I.3 в этом ответе, вы увидите, что Вы можете использовать простейший синглтон (настолько простой, что его часто не считают синглтоном) для инициализации при первом использовании, поэтому вряд ли авторы возражают против синглетонов серьезно. - person Tony Delroy; 09.11.2015
comment
Как в рекомендациях рассматривается использование синглтона, когда должен быть только один экземпляр объекта (например, физического ресурса)? - person pooya13; 18.07.2020