Операція delete
Якщо наша програма багато ділянок пам’яті, використовуючи операцію new, то теоретично вона може зайняти весь простір пам’яті, що призвекде до краху системи. Щоб уникнути цього і ефективно використати пам’ять, використовується операція delete. Вона призначена для вивільнення виділених ділянок пам’яті, повертаючи їх операційній системі. В попередній програмі рядок
delete[] ptr;
повертає системі пам’ять, на яку вказує вказівник ptr.
Насправді в останньому прикладі нам не потрібна ця операція, оскільки пам’ять автоматично вивільняється після завершення роботи програми, але такий прийом може бути корисним при використанні функцій.
Вмвільнення пам’яті не передбачає видалення вказівника, зв’язаного з цим блоком пам’яті, це і не зміна адреси значення, на яку вказує вказівник. Однак цей вказівник вже не має сили, пам’ять, на яку він вказує, може бути використана з іншою метою.
Квадратні дужки після операції delete вказують на те, що буде вивільнятися масив. При вивільненні пам’яті, виділеної для одинарного об’єкту, дужки не потрібні.
ptr=new some;
delete ptr;
Але при вивільенні пам’яті, зайнятої масивом, дужки обов’язкові. Їх використання передбачає, що ми вивільняємо пам’ять, використовувану для всіх членів масиву одночасно.
Питання
1. Вказівник – це:
а) адреса змінної
б) позначення змінної, яка буде доступною
в) змінна для зберігання адреси
г) тип даних для адресних змінних
2. Вираз *test означає
а) вказівник на змінну test
б) розіменування змінної test
в) посилання на значення змінної, на яку вказує test
3. Чи є правильним такий код:
int intvar=333;
int *intptr;
cout<<*intptr;
а) правильний
б) ні, значення вказівника не ініціалізоване
4. Чи відрізняються записи intarr[3] та *(intarr+3)
а) відрізняються
б) не відрізняються, обидва роблять те саме
5. Тип змінної, на яку вказує вказівник, повинен бути присутнім у визначенні вказівника для того:
а) щоб типи даних не перемішалися при виконанні арифметичних операцій
б) щоб компілятор міг правильно виконувати арифметичні операції і дістав доступ до елементів масиву
6. Перший елемент стрічки – це
а) ім’я стрічки
б) перший символ стрічки
в) довжина стрічки
7. Операція new
а) повертає вказівник на змінну
б) створює змінну з іменем new
в) одержує пам’ять для нової змінної
г) дозволяє дізнатися, скільки пам’яті вільно на даний момент
8. Нехай intarr – масив цілих. Чи правильним є запис intarr++ ?
а) так
б) ні
9. Вказівник void може містити вказівник на
а) довільний тип даних
б) порожню адресу
10. Операція delete
а) повертає пам’ять операційній системі
б) здійснює вихід з програми
