Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Контакти
 


Тлумачний словник
Авто
Автоматизація
Архітектура
Астрономія
Аудит
Біологія
Будівництво
Бухгалтерія
Винахідництво
Виробництво
Військова справа
Генетика
Географія
Геологія
Господарство
Держава
Дім
Екологія
Економетрика
Економіка
Електроніка
Журналістика та ЗМІ
Зв'язок
Іноземні мови
Інформатика
Історія
Комп'ютери
Креслення
Кулінарія
Культура
Лексикологія
Література
Логіка
Маркетинг
Математика
Машинобудування
Медицина
Менеджмент
Метали і Зварювання
Механіка
Мистецтво
Музика
Населення
Освіта
Охорона безпеки життя
Охорона Праці
Педагогіка
Політика
Право
Програмування
Промисловість
Психологія
Радіо
Регилия
Соціологія
Спорт
Стандартизація
Технології
Торгівля
Туризм
Фізика
Фізіологія
Філософія
Фінанси
Хімія
Юриспунденкция






Оператор delete

По завершенню роботи з виділеною областю пам’яті її необхідно звільнити. Це робиться з допомогою оператора delete:

delete pR;

Необхідно пам’ятати, що сам вказівник є локальною змінною. Тому, коли функція, яка оголосила вказівник, завершує роботу, вказівник виходить з області дії, а записана у ньому адреса губиться. Пам’ять, що виділена оператором new не звільняється автоматично. Якщо ж її адреса буде загублена, то її не можна ні використати, ні видалити. Така ділянка пам’яті стає абсолютно недосяжна і така ситуація називається утіканням пам’яті.

Після роботи оператора delete сам вказівник залишається і в нього можна записати іншу адресу.

Якщо застосувати оператор delete два рази до одного вказівника, між якими не буде оператора new, то це призведе до зависання програми. Тому рекомендується при звільнені області динамічної пам’яті присвоїти пов’язаному з нею вказівнику значення 0:

delete pR;

pR = 0;

Ще одна можлива неприємність переприсвоїти вказівник, попередньо не звільнивши ділянку пам’яті, на яку він вказував. Це призведе до утікання пам’яті. Наприклад:

int * pR = new int;

*pR = 72;

pR = new int;

*pR = 84;

Тепер вихідна ділянка пам’яті, яка зберігає значення 72, є недосяжною, оскільки вказівнику на цю ділянку було приписано нове значення. В результатіне можливо ні звільнити, ні використати зарезервовану пам’ять до завершення програми. Правильно треба було записати так:

int * pR = new int;

*pR = 72;

delete pR;

pR = new int;

*pR = 84;

Кожний раз, коли в програмі використовується оператор new за ним має бути десь в програмі записаний оператор delete.

Створення об’єктів в області динамічної пам’яті

В динамічній пам’яті можна розміщати об’єкти будь-яких класів. Наприклад, якщо створити об’єкт Cat, то для маніпулювання з ним можна створити вказівник, який буде зберігати адресу об’єкту:

Cat *pCat = new Cat;//вказівник pCat типу класу Cat? В правій частині тип об’єкту є клас Cat.

В даному випадку в операторі new використано конструктор класу по замовчуванню, без параметрів.




Переглядів: 163

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

 

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.005 сек.