Бьерн Страуструп - Язык программирования С++. Главы 2-4 - Время жизни объектов

ОГЛАВЛЕНИЕ

2.1.3  Время жизни объектов

Если только программист не вмешается явно, объект будет создан при появлении его определения и уничтожен, когда исчезнет из области видимости. Объекты с глобальными именами создаются, инициализируются (причем только один раз) и существуют до конца программы. Если локальные объекты описаны со служебным словом static, то они также существуют до конца программы. Инициализация их происходит, когда в первый раз управление "проходит через" описание этих объектов, например:
    int a = 1;

    void f()
    {
      int b = 1;   // инициализируется при каждом вызове f()
      static int c = a;  // инициализируется только один раз
      cout << " a = " << a++
           << " b = " << b++
           << " c = " << c++ << '\n';
    }

    int main()
    {
      while (a < 4) f();
    }

Здесь программа выдаст такой результат:

    a = 1 b = 1 c = 1
    a = 2 b = 1 c = 2
    a = 3 b = 1 c = 3

''Из примеров этой главы для краткости изложения исключена макрокоманда #include <iostream>. Она нужна лишь в тех из них, которые выдают результат.

Операция "++" является инкрементом, т. е. a++ означает: добавить 1к переменной a.

Глобальная переменная или локальная переменная static, которая не была явно инициализирована, инициализируется неявно нулевым значением (#2.4.5).

Используя операции  new и delete, программист может создавать объекты, временем жизни которых он управляет сам (см. $$3.2.6).