Глава 7. Указатели и ссылки__________________________________767
Замечание
Не слишком строгое изложение при обсуждении этих тем объясняется тем, что технические детали не столь ,важны, как общая идея. Пока дело не дошло до системного программирования, где вам может понадобиться самим управлять стеком, на точность слов можно обращать меньше внимания, чем на их смысл.
Для любознательных: сегмент стека — это блок памяти, размер которого для вашей программы задается в файле .гс. Здесь сохраняется информация о последней команде, выполненной перед вызовом функции. Через стек передаются аргументы функций, а локальные переменные посредством стека удовлетворяют свою потребность в памяти. Практически все манипуляции со стеком осуществляются через указатель стека. Вся эта деятельность обычно происходит за сценой посредством встроенных средств вашего компьютера.
Переменные вроде тех, что определены в SomeFunction, обычно предназначаются для использования в пределах локальной области видимости функции. Проблемы возникают тогда, когда программисты пытаются использовать локальные переменные как возвращаемые значения. Читайте дальше, и вы узнаете, почему.
Динамические объекты, размещенные с локальными указат е-лями. Теперь мы поговорим о блоках памяти, адресуемых локальными переменными, вроде char *p из предыдущего раздела. Хотя переменная р является локальной для SomeFunction, указатели часто ассоциируются с блоками памяти, вызванными посредством операции new, когда, как следствие, адресуемый блок размещается в куче.
Это означает, что р — это логический "дескриптор", позволяющий освободить фрагмент памяти, на который указывает р. Как было показано в предыдущем разделе, локальные переменные (такие как num и р) автоматически удаляются, когда функция завершает свою работу (код доходит до закрывающей скобки тела функции). Для динамических данных это не так. Согласно общему правилу каждому вызову операции new должна соответствовать своя операция delete (как объяснялось в главе 6).
Еще раз напомним, что здесь мы говорили об области видимости для переменных, определенных внутри функции.
Возвращение ссылок на локальные объекты
Если в объявлении функции для возвращаемого значения задается только тип данных, значит имеет место возврат по значению. В этой главе вы увидите ситуации, когда возврат по ссылке может быть неверно использован.
Рассматривая понятие области видимости, мы разобрались, что переменные, определенные внутри функций, имеют локальную область видимости, хранятся в стеке и автоматически ликвидируются. Хотя для указателей это так-