Динамические переменные
Динамические переменные. Одномерные динамические массивы
Переменные, массивы и другие данные, находящиеся в фиксированных областях памяти, называются статическими. Память для них резервируется во время компиляции программы.
В языке С++ существует и другой способ выделения памяти для данных – во время выполнения программы. Такие данные (переменные, массивы) называются динамическими, они создаются по требованию программы и запоминаются в блоках памяти переменного размера, принадлежащих специальным образом организованной области памяти – так называемой ”куче”.
Динамические переменные
В С++ наиболее распространённым способом создания динамической переменной является использование операции new и указателя:
переменная-указатель = new тип_переменной;
Операция new выделяет область памяти в куче для хранения значения заданного типа и возвращает адрес начала выделенной памяти, который присваивается переменной-указателю, например:
int * p = new int;
При выполнении этого оператора создаётся динамическая переменная целого типа, адрес которой присваивается указателю p.
С помощью операции new можно выделить память в куче для значений переменных любого допустимого типа.
Если свободной памяти в куче для создания новой переменной оказалось недостаточно, операция new возвращает нулевое значение (0 или NULL). Поэтому программа должна проверять успешность создания динамической переменной:
if(p == NULL){ // или if(!p)
cout<<”Error: no memory”<<endl;
exit(1);
}
При создании динамической переменной допускается сразу присвоить ей значение (проинициализировать):
int * p = new int(5);
В результате выполнения данного оператора переменной, адресуемой указателем p, будет присвоено значение 5.
После выделения области памяти и присваивания её адреса указателю можно разыменовать этот указатель и использовать память, как если бы она принадлежала статической переменной.
После того как необходимость в использовании динамической переменной отпала, занимаемую её память следует освободить. Это можно сделать с помощью операции delete:
delete переменная-указатель;
Операция delete не требует указывать размер освобождаемой памяти, так как в С++ существует специальный механизм, позволяющий автоматически связывать с указателем размер области памяти, на которую он указывает.
Пример. Использование операций new,delete.
…
int *p = new int; // выделение памяти для int- значения
*p = 20; // занесение в эту память значения 20
cout<<*p<<endl; // вывод20 на экран
delete p; // освобождение памяти
…
Переменные, созданные с помощью операции new, называются динамическими переменными, потому что они создаются и уничтожаются в процессе выполнения программы. Динамические переменные размещаются в куче – динамической памяти. Для доступа к таким переменным используются только указатели (косвенная адресация), так как ячейкам динамической памяти нельзя присвоить имя. Занимаемая переменной память в куче освобождается с помощью операции delete.
Дата добавления: 2022-05-27; просмотров: 70;