Недавно меня спросили о шаблоне проектирования singleton в C++. Я не знал точно, что он делает или когда это требуется, поэтому я попытался найти его. Я нашел много ответов в основном на stackoverlow, но мне было трудно понять код, упомянутый в этих вопросах и ответах. Я знаю следующее свойство, которое синглтон должен удовлетворять, исправьте меня, если я ошибаюсь.Объяснение синглтонного кода C++
It is used when we need to make one and only one instance of a class.
В этой связи возникает следующий вопрос, на мой взгляд
Does this mean that it can be created only once or does this mean that it can be
created many times but at a time only one copy can exist?
Сейчас подходит к реализации. скопирована из here
class S
{
public:
static S& getInstance()
{
static S instance; // Guaranteed to be destroyed.
// Instantiated on first use.
return instance;
}
private:
S() {}; // Constructor? (the {} brackets) are needed here.
// Don't forget to declare these two. You want to make sure they
// are inaccessible otherwise you may accidentally get copies of
// your singleton appearing.
S(S const&); // Don't Implement
void operator=(S const&); // Don't implement
};
Пожалуйста, объясните:
- Почему мы должны сделать функцию getinstace() статический?
- Зачем нам S (S const &); конструктор?
- Что делает оператор void = (S const &); делать?
- Почему мы не реализовали последние две функции?
- Зачем нам гарантированное уничтожение этого экземпляра (как указано в коде)?
Привет, о вопросе в 4-м абзаце?Означает ли это, что он может быть создан только один раз или это означает, что он может быть создан много раз, но в то время может существовать только одна копия? – nitinsh99
Он будет создан только один раз, когда вызывается 'getInstance'. Но вы можете получать ссылки на него несколько раз. –
Последнее, зачем нам гарантированное уничтожение этого экземпляра (как указано в коде)? Разве это не единственное требование синглтона, так это то, что «у него должен быть только один экземпляр», то почему мы должны беспокоиться о его освобождении? – nitinsh99