2. Какво представлява динамичната
памет (хийп) ?
Хийпът е по-постоянна област за
съхранение на данни от стека.
Не се свързва с променливи.
Работи се чрез указатели.
Използва се при работа с динамични
структури от данни.
3. Динамичните данни
Обекти, чиито брой не е известен в момента
на проектиране на програмата.
Те се създават и разрушават по всяко време на
изпълнението ѝ.
• След разрушаването паметта
се освобождава.
4. Оператор new - Синтаксис
Синтаксис
new <име_на_тип> [[size]]опц |
new <име_на_тип> (<инициализация>)
1. size – показва броя на компонентите
от тип <име_на_тип>, за който да се
задели памет
5. Оператор new - Семантика
Заделя в хийпа
1. sizeof(<име_на_тип>) байта ако не са
зададени size и <инициализация>
2. sizeof(<име_на_тип>)*size байта, ако е
явно указан size
3. sizeof(<име_на_тип>) ако е
специфицирана <инициализация>,
която памет се инициализира с нея и
връща указател.
6. Примери:
int* q = new int(2+5*5); - 4B памет -> 27
и свързва q с адреса на паметта.
int* p = new int[10]; - 40B за 10 ел-та и
свъзва p с адреса на паметта.
rat* r = new rat; - за обект от тип rat,
записва адреса в r, извиква
конструктора по default.
7. Видове заделяне на памет
По време на компилация (статично
заделяне)
По време на изпълнение (динамично
заделяне) – създадените променливи,
обекти, класове и др. се наричат
динамични.
8. Променливи
Активност на променлива – частта от
времето, през което променливата е
свързана с определено място в паметта.
Глобални променливи – заделя се в
началото и остава до завършване.
Локални пром. – заделя се при влизане в
локалната област.
Динамични обекти – заделя се чрез new
10. Оператор delete - Семантика
Разрушава обекта, адресиран от
указателя, като паметта, която заема
този обект, се освобождава.
Ако обектът е обект на клас, то първо
се извиква деструкторът и след това се
освобождава паметта.
11. Пример
int* arr = new int[5];
delete [] arr;
Когато трябва да се унищожи
единичен обект се използва само
delete, а за масив - delete [].
Операторът се използва само за памет
заделена с new.
12. Примерна програма
Да се напише програма, която създава динамичен масив от
естествени числа, след което го извежда.
int main(){
int size; //дължина на масива
do
{
cout << „size of array:“;
cin >> size;
} while (size < 1);
int* arr = new int[size]; // дин. масив arr от size ел-та от тип int
int i;
for(i=0 i<= size-1, i++)
arr[i]=i;
for(i=0 i<= size-1, i++) // извеждане на ел-тите на масива
cout << arr[i] << „ “ ;
cout << endl;
delete [] arr; // освобождаване на заетата памет
return 0;
}