Singleton - одно из возможных применений.Другое возможное использование - предоставить один предварительно упакованный готовый к использованию экземпляр.
Предположим, у вашего класса дорогой конструктор, он использует тонны памяти и вам нужно создать много экземпляров.Хорошей новостью является то, что большинство случаев идентичны.Вы можете сделать наиболее широко используемую копию статической и использовать ее по мере необходимости.
Пример.Бар может быть построен из целого числа.Экземпляр, построенный из 0, пользуется повышенным спросом.Это хороший кандидат на то, чтобы стать статическим.
class Bar {
public:
Bar(int n) : n_bar(n) {
// if n!=0, construct new instance of Bar, else recycle static instance
}
void foo() const { // note, it is const
if(n_bar==0)
bar0.foo();
else {
// do something
}
}
private:
int n_bar;
static Bar bar0; // initialize to Bar(0)
};
Вместо одного статического члена вы также можете создать целую батарею статических экземпляров (используя std :: map с int как ключи и Bars как значения)по запросу.