Предсказание за пять часов до землетрясения это же мечта! Если оно будет сбываться хотя бы в половине случаев. И если точность по времени будет хотя бы два часа.
Просто всем одеться и выйти из зданий.
Вы сами неужели отказались бы одеться и выйти, если знали бы, что предсказания ошибаются через раз, но и угадывают через раз? А если предсказатели ошиблись, немедленно рассылают SMS: «Нет, пронесло. Всем обратно спать».
Раздосадован! Ещё недели не прошло с момента публикации, а уже нет возможности проголосовать за статью.
Сдаётся мне, многие из тех, кто интересуются таким специальным материалом, ходят на Хабр раз в неделю и реже. Действительно ли администрация заинтересована в накоплении здесь ценных текстов? Или всё это скорее этакий вконтактик для разработчиков?
Когда вызываем Singleton::Instance(), мы должны опасаться, что может произойти повторный вход (reenter) в метод, из которого делаем вызов. Примерно так:
A::Instance() приводит к вызову B::Instance() B::Instance() приводит к вызову C::Instance()
… X::Instance() приводит к вызову A::Instance()
Как видим, при ленивой инициализации порядок создания объектов так же может выйти из-под контроля и создать не меньшие проблемы, чем с глобальными объектами.
Про то, что можно не бояться порядка инициализации, писал выше.
Впрочем, одну деталь я упустил с самого первого примера. Глобальность переменной тоже надобно показывать префиксом. Заменяем повсюду singletonInstance и singletonThe на g_singletonInstance.
Атрибут __declspec(selectany) поддерживается и в gcc, и в Borland C++, и в Clang с ключом -fms-extensions.
Не поддерживается в Intel C++. Однако его используют около 2% присутствующих (из пишущих на С++) – результаты опроса.
А неудачный порядок инициализации глобальных переменных выявляется сам собой, если в нашем проекте есть самый минимальный набор автоматических тестов. К моменту входа в main глобальные переменные должны быть инициализированы. Практически любой тест должен бы достигать этой точки.
В нашем проекте так много классов с паттерном Одиночка (Singleton), что можно запутаться в порядке их инициализации. Значит это не мелкая поделка, а большой проект, а значит и автоматические тесты в нём конечно же есть.
Зная всё это, спросите себя, согласны ли вы вдвое ухудшить читабельность везде, где происходит обращение к объекту класса Singleton.
Если больше, тогда всё усложняется – в каждом квартале палатки, стулья, чай, печенье, вайфай, временные туалеты. Но и такое можно осилить.
Просто всем одеться и выйти из зданий.
Вы сами неужели отказались бы одеться и выйти, если знали бы, что предсказания ошибаются через раз, но и угадывают через раз? А если предсказатели ошиблись, немедленно рассылают SMS: «Нет, пронесло. Всем обратно спать».
ru.wikipedia.org/wiki/Звено_19#Найденные_обломки
После стольких лет существования сайта в хабе «Разработка под Windows» нет ни одной статьи.
Ваша техподдержка отвечает только лишь неприемлемое: «Пока механизма ручного переноса постов нет, возможно, он скоро появится».
Сдаётся мне, многие из тех, кто интересуются таким специальным материалом, ходят на Хабр раз в неделю и реже. Действительно ли администрация заинтересована в накоплении здесь ценных текстов? Или всё это скорее этакий вконтактик для разработчиков?
libeay32.dll
иssleay32.dll
Как, например, обновить OpenVPN под Windows?
Singleton::Instance()
, мы должны опасаться, что может произойти повторный вход (reenter) в метод, из которого делаем вызов. Примерно так:A::Instance()
приводит к вызовуB::Instance()
B::Instance()
приводит к вызовуC::Instance()
…
X::Instance()
приводит к вызовуA::Instance()
Как видим, при ленивой инициализации порядок создания объектов так же может выйти из-под контроля и создать не меньшие проблемы, чем с глобальными объектами.
Про то, что можно не бояться порядка инициализации, писал выше.
Впрочем, одну деталь я упустил с самого первого примера. Глобальность переменной тоже надобно показывать префиксом. Заменяем повсюду
singletonInstance
иsingletonThe
наg_singletonInstance
.менее читабельно, чем
?
__declspec(selectany)
поддерживается и в gcc, и в Borland C++, и в Clang с ключом-fms-extensions
.Не поддерживается в Intel C++. Однако его используют около 2% присутствующих (из пишущих на С++) – результаты опроса.
А неудачный порядок инициализации глобальных переменных выявляется сам собой, если в нашем проекте есть самый минимальный набор автоматических тестов. К моменту входа в
main
глобальные переменные должны быть инициализированы. Практически любой тест должен бы достигать этой точки.В нашем проекте так много классов с паттерном Одиночка (Singleton), что можно запутаться в порядке их инициализации. Значит это не мелкая поделка, а большой проект, а значит и автоматические тесты в нём конечно же есть.
Зная всё это, спросите себя, согласны ли вы вдвое ухудшить читабельность везде, где происходит обращение к объекту класса Singleton.
Коллеги, вы предпочитаете повсюду писать
Singleton::Instance()
вместоsingletonThe
– два идентификатора вместо одного? Или какая-то другая причина?Ещё требуется указать, что эта переменная одна общая для всех cpp-файлов, использующих наш Singleton.h. Например в MSVC это так:
Описание говорит, что он ускоряет дело. Есть надежда получить результат близкий к наибыстрейшему даже на коротких массивах.