Pull to refresh

Comments 6

«Например, вызывать метод instance для этого Singleton до создания первого потока, который будет его использовать, например, вначале main() или в функции, создающей эти потоки.» Только, если весь код твой. Но если твою библиотеку будут использовать обезьяны, или ты забудешь упомянуть о этой «тонкости» в доках крупными буквами, то рискуешь нарваться на большой дизреспект.
Согласен — для библиотек для обезьян простейший синглетон мейерса без ограничений не подойдет.
Но от обезьян тогда надо ограждаться другим способом. Например, сделать синглетон, которому надо new вызывать самостоятельно. тогда обезьяны сами будут ответственны за создание экземпляра в нужном месте ИХ программы.
Или предоставить в библиотеке функцию initLibrary. И обязать ее дергать до вызова любой другой функции из библиотеки — и уже там создавать синглетоны.

Мое имхо, что лучше понадеяться на разумность тех, кто будет пользоваться библиотекой, чем городить такой нечитаемый код, как по ссылке.
# error MSVC REQUIRED FOR NOW!
Это по-вашему совершенная реализация? :)

Например, вызывать метод instance для этого Singleton до создания первого потока, который будет его использовать, например, вначале main() или в функции, создающей эти потоки.

А если этот синглтон вообще не будет использоваться в программе, вы его всё равно создадите. А приведённый в статье код создаст синглтон только если он действительно будет нужен.
>>Это по-вашему совершенная реализация? :)
Это не по-моему, а по мнению автора. По-моему реализация ужасная.

>>А если этот синглтон вообще не будет использоваться в программе, вы его всё равно создадите.
А я не люблю не контролировать свой код. Лучше уж создавать всегда в одном месте, чем в рандомное время из любого потока или вообще с возможностью не создавать.
А я не люблю не контролировать свой код. Лучше уж создавать всегда в одном месте, чем в рандомное время из любого потока или вообще с возможностью не создавать.
Вам лучше, кому-то не лучше. Поэтому совершенная реализация должна предусматривать возможность создавать инстанс синглтона только тогда, когда это нужно.
Совершенная реализация синглетона Мейерса на текущем С++ — это в первую очередь уродский код.
Вот в новом стандарте можно будет написать просто:
T& instance()
{
static T var;
return var;
}

А многопоточность разрулит уже сам компилятор.
Вот это более похоже на идеальный код :)
Sign up to leave a comment.

Articles