Снова о Singleton
От: Hatter  
Дата: 25.02.05 12:46
Оценка:
Доброго времени суток, господа!

я понимаю, что Singleton — хрестоматийный и, наверное, самый изъезженный и изученный вдоль и поперек шаблон, но помогите мне, начинающему программисту/проектировщику понять зачем же он все-таки нужен, и в какой ситуации мы не можем обойтись глобальной переменной. (в первую очередь речь идет о C++)

...да, да, экземпляр должен быть один — так и не создавать других! Написать один раз в блоке инициализации исходника, реализующего этот класс:
ALaSingleton aLaSingleton();

...по крайней мере, мы сможем быть уверенными, что в конце выполнения для него вызовется деструктор, а с этим дела обстоят не так-то просто в "канонической" реализации Singleton (которая, например, приведена в книге "Банды Четырех").

Нет, я нахожу его весьма удобным во всех случаях кроме того, что я _не могу быть уверенным в том, что все ресурсы, которые взял Singleton_ будут возвращены "на место" при завершении программы (что вызовется какой-нибудь деструктор, другими словами).

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

Singleton::Instance()->oper(); // счетчик равен 1
Singleton *s = Singleton::Instance(); //счетчик равен 2
s->FreeInst(); // снова 1
Singleton::Instance()->oper(); // снова 2

и не к чему мне теперь эти FreeInst применять. А если она static,
то я, получается, должен вручную считать сколько раз я обратился
к объекту... весьма стрaнно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.