Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT | страница 7



>// Включаемый файл для потокового ввода/вывода

>#include


>void main(void) {

> // Определяем переменную iVar

> int iVar = 10;


> // Определяем ссылку iReferenceVar на переменную iVar

> int& iReferenceVar = iVar;


> // Отображаем значение переменной и ссылки

> cout << "iVar = " << iVar << ";

> iReferenceVar = " << iReferenceVar << '\n';


> // Изменяем значение переменной iVar пользуясь ссылкой

> iReferenceVar = 20;


> // Отображаем значение переменной и ссылки

> cout << "iVar = " << iVar << ";

> iReferenceVar = " << iReferenceVar << '\n';

>}

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

Функция может не только принимать ссылки в качестве своих параметров, она также может возвращать ссылку. Такую функцию можно привести в левой части оператора присваивания.

Распределение памяти

Стандартная библиотека компиляторов содержит специальные функции управления памятью – malloc, free, а также другие разновидности этих функций. Они позволяют получить для использования блок оперативной памяти, и затем отдать его обратно операционной системе.

В Си++ встроены специальные операторы для управления памятью – оператор new и оператор delete . Эти операторы очень удобны для динамического создания переменных, массивов и объектов классов, поэтому мы остановимся на них более подробно.

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

Оператор new создает объект заданного типа. При этом он выделяет память, необходимую для хранения объекта и возвращает указатель, указывающий на него. Если по каким-либо причинам получить память не удается, оператор возвращает нулевое значение. Оператор new позволяет сразу инициализировать созданную переменную. Приведем формат оператора new:

>new type-name [initializer];

>new (type-name) [initializer];

В качестве аргумента type-name надо указать имя типа создаваемого объекта. Дополнительный аргумент initializer позволяет присвоить созданному объекту начальное значение. Вот простой пример вызова оператора new:

>char *litera;

>int *pi;

>litera = new char;

>pi = new int(3,1415);

В этом примере оператор new используется для создания двух объектов – одного типа char, а другого типа int. Указатели на эти объекты записываются в переменные litera и pi. Заметим, что объект типа int сразу инициализируется значением 3,1415.

Чтобы освободить память, полученную оператором new, надо вызвать оператор delete. Вы должны передать оператору delete указатель pointer, ранее полученный оператором new: