Использование оператора new
Память для величины какого-либо типа можно выделить, выполнив операцию new. В качестве операнда выступает название типа, а результатом является адрес выделенной памяти.
long* lp;
lp = new long; // выделить память под новое целое число
float* cp;
// создать новый объект типа float
cp = new float;
Созданный таким образом объект существует до тех пор, пока память не будет явно освобождена с помощью операции delete. В качестве операнда delete должен быть задан адрес, возвращенный операцией new:
delete lp;
delete cp;
Если необходимо динамически создать массив, то нужно использовать немного другую форму new. Предположим, что вашей программе необходим массив для хранения 50 целочисленных значений. Используя оператор new, вы можете заказать эту память, как показано ниже:
int *buffer = new int[50];
Говоря кратко, если оператор newуспешно выделяет память, он возвращает указатель на начало области этой памяти. В данном случае, поскольку программа распределяет память для хранения массива целых чисел, она присваивает возвращаемый указатель переменной, определенной как указатель на тип int. Если оператор newне может выделить запрашиваемый вами объем памяти, он возвратит NULL-указатель, который содержит значение 0. Каждый раз, когда программа динамически распределяет память с использованием оператора new, она должна проверять возвращаемое оператором new значение, чтобы определить, не равно ли оно NULL. Чтобы определить, выделил ли оператор new память, ваша программа должна сравнить значение указателя с NULL, как показано в примерах ниже:
Пример 1.
Следующая программа использует оператор new для получения указателя на 100-элементный целочисленный массив:
#include "stdafx.h"
#include <iostream.h>
void main()
{
int *pointer=new int[100];
if (pointer != NULL) cout << "Память успешно выделена";
else cout << "Ошибка выделения памяти" << endl;
}
Как видите, программа сразу проверяет значение, присвоенное оператором newпеременной-указателю. Если указатель содержит значение NULL, значит new не смог выделить запрашиваемый объем памяти. Если же указатель содержит не NULL, следовательно, new успешно выделил память и указатель содержит адрес начала блока памяти.
Дата добавления: 2015-02-10; просмотров: 659;