Операція delete
Якщо наша програма резервує багато ділянок пам’яті за допомогою операції new, то зрештою весь можливий простір пам’яті буде зайнятим і система впаде. Для того, щоб уникнути цього і ефективно використовувати пам’ять, використовується операція delete. Вона призначена для вивільнення виділених ділянок пам’яті, повертаючи їх операційній системі. В програмі 20.15 рядок
delete[]ptr;
повертає системі пам’ять, на яку вказує вказівник ptr.
Насправді в програмі 20.15 ця операція непотрібна, оскільки пам’ять автоматично вивільняється після завершення роботи програми. Однак припустимо, що ми використовуємо операцію new в функції. Якщо функція використовує локальну змінну як вказівник на пам’ять, виділену з використанням new, то вказівник буде знищений після завершення роботи функції, але пам’ять залишиться виділеною і, отже, недоступною з програми. Тому звільнення пам’яті після того, як вона була виділена, вважається хорошим стилем, а часто й необхідне.
Звільнення памті не означає видалення вказівника, зв’язаного з цим блоком пам’яті; це і не зміна адреси значення, на яку вказує вказівник. Однак цей вказівник не має сили: пам’ять, на яку він вказує, може бути використана з іншою метою. Тому треба бути обережним і не використовувати вказівників на вивільнену пам’ять
Квадратні дужки, записані після операції delete, означають, що ми звільняємо масив. При звільненні пам’яті, виділеної для одинарного об’єкту, використання дужок не вимагається.
ptr=new SomeClass; //створення обєкту
delete ptr; //вивільнення обєкту
Натомість при вивільненні пам’яті, зайнятої масивом, дужки обов’язкові. Їх використання означає, що ми вивільняємо пам’ять, використовувану для всіх членів масиву, одночасно.
Дата добавления: 2015-08-26; просмотров: 608;