Объекты и Адреса (Lvalue)
Можно назначать и использовать переменные, не имеющие имен, и можно осуществлять присваивание выражениям странного вида (например, *p[a+10]=7). Следовательно, есть потребность в имени "нечто в памяти". Вот соответствующая цитата из справочного руководства по C++: "Объект есть область памяти; lvalue есть выражение, ссылающееся на объект". Слово "lvalue" первоначально было придумано для значения "нечто, что может стоять в левой части присваивания". Однако не всякий адрес можно использовать в левой части присваивания; бывают адреса, ссылающиеся на константу (см. эту главу).
Время Жизни
Если программист не указал иного, то объект создается, когда встречается его описание, и уничтожается, когда его имя выходит из области видимости, Объекты с глобальными именами создаются и инициализируются один раз (только) и "живут" до завершения программы. Объекты, определенные описанием с ключевым словом static, ведут себя так же. Например *1:
int a = 1; void f() { int b = 1; // инициализируется при каждом вызове f() static int c = 1; // инициализируется только один раз cout << " a = " << a++ << " b = " << b++ << " c = " << c++ << "\n"; }
main() { while (a < 4) f(); }
производит вывод
a = 1 b = 1 c = 1 a = 2 b = 1 c = 2 a = 3 b = 1 c = 3
Не инициализированная явно статическая (static) переменная неявно инициализируется нулем.
С помощью операций new и delete программист может также создавать объекты, время жизни которых управляется непосредственно; см. этот пункт
1 2 3
8 8 8
| |