Кент Рейсдорф. BORLAND C++BUILDER. Раздел 1

Кент Рейсдорф. BORLAND C++BUILDER. Страница 63

void IncrementPosition(int* xPos, int* yPos) {

*xPos++; // разыменование, затем увеличение *yPos++;

Обратите внимание, что указатель необходимо разыменовать перед уве­личением значения переменной. В большинстве ситуаций передача по ссылке будет лучшим решением стоящей перед вами задачи, но в отдельных случаях без указателей обойтись трудно. При передаче массива типа char вместо ссылки обычно используется указатель, т.к. он взаимозаменяем с именем массива. В данном случае указатель оказывается удобнее, чем ссылка.

Операторы new и delete

До этого момента я рассказывал главным образом о тех элементах Си++, которые пришли из Си. Теперь мы будем рассматривать возможности, при­сущие только Си++. Два оператора, new и delete, играют в Си++ очень важную роль.

Как упоминалось в предыдущем разделе, динамическое распределение памяти в программах на Си++ осуществляется оператором new. Для осво­бождения памяти используется оператор delete. Даже если вы программи­ровали раньше на Си, вы не могли ощутить простоты применения new и delete. В программах на Си для динамического распределения памяти нужно использовать функции malloc(), calloc(), realloc() и free(). При программиро­вании в Windows ситуация еще больше усложняется — существует целый набор функций для локального и глобального распределения памяти. Хотя их использование не так уж сложно, всегда существует вероятность запу­таться. Си++ устраняет все проблемы с помощью операторов new и delete.

Оператор new

Вы уже видели new в действии, поэтому придется кое-что повторить. Как говорилось ранее, память можно распределять локально (в стеке) или динамически (в «куче»). Следующий фрагмент содержит примеры размеще­ния двух символьных массивов. В одном случае память выделяется в стеке (локальное распределение), а в другом — из «кучи» (динамическое распре­деление):

Web-дизайн (с) 2010 All rights reserved