Здавалка
Главная | Обратная связь

Операция выделения памяти new



С помощью вышеозначенной операции мы можем себе позволить выделять память динамически - т. е. на этапе выполнения программы.

Часто выражение, содержащее операцию new, имеет следующий вид:

указатель_на_тип_= new имя_типа (инициализатор)

Инициализатор - это необязательное инициализирующее выражение, которое может использоваться для всех типов, кроме массивов.

При выполнении оператора

int *ip = new int;

создаются 2 объекта: динамический безымянный объект и указатель на него с именем ip, значением которого является адрес динамического объекта. Можно создать и другой указатель на тот же динамический объект:

int *other=ip;

Если указателю ip присвоить другое значение, то можно потерять доступ к динамическому объекту:

int *ip=new (int); int i=0; ip=&i;

В результате динамический объект по-прежнему будет существовать, но обратиться к нему уже нельзя. Такие объекты называются мусором.

При выделении памяти объект можно инициализировать:

int *ip = new int(3);

Можно динамически распределить память и под массив:

double *mas = new double [50];

Далее с этой динамически выделенной памятью можно работать как с обычным массивом:

#include <iostream>#include <stdlib.h>#include <time.h>using namespace std;void main(){ srand(time(NULL)); int size; int * dar; // запрос размера массива с клавиатуры cout<<"Enter size:\n"; cin>>size; //выделение памяти под массив с количеством элементов size dar=new int [size]; if(!dar){ cout<<"Sorry, error!!!"; exit(0);// функция организует выход из программы } // заполнение массива и показ на экран for(int i=0;i<size;i++){ dar[i]=rand()%100; cout<<dar[i]<<"\t"; } cout<<"\n\n";}

В случае успешного завершения операция new возвращает указатель со значением, отличным от нуля.

Результат операции, равный 0, т.е. нулевому указателю NULL, говорит о том, что не найден непрерывный свободный фрагмент памяти нужного размера.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.