использование статического члена в качестве класса typein C ++ - PullRequest
2 голосов
/ 03 января 2011

Основываясь на «c ++ primer», тип статического члена данных может быть типом класса, членом которого он является:

class Bar {
 public:
     // ...
 private:
     static Bar mem1; // ok
 };

Однако мне сложно представить сценарий, в которомтакая функция полезна.Я имею в виду, зачем вам переменная типа класса?Может кто-нибудь привести мне несколько примеров?Спасибо.

Ответы [ 4 ]

5 голосов
/ 03 января 2011

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 как значения)по запросу.

5 голосов
/ 03 января 2011

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

4 голосов
/ 03 января 2011

одноточечно

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

1 голос
/ 03 января 2011

одно слово: синглтон .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...