---
title: Управление памятью
seo:
  title: Управление памятью — C++ Developer
  description: "Тема «Управление памятью» для собеседования C++ Developer. Чем отличаются delete и delete[]? Что случится, если вызвать delete у объекта, созданного через new[]? Что такое memory leak?"
---

[Все темы C++ Developer](/c-developer)

## <strong>Чем отличаются</strong> <code>delete</code> <strong>и</strong> <code>delete&#91;&#93;</code><strong>? Что случится, если вызвать</strong> <code>delete</code> <strong>у объекта, созданного через</strong> <code>new&#91;&#93;</code><strong>?</strong> [#q-14bee738d69b818c8cabf6a269c27e12]

<strong>Отличия</strong> <code>delete</code> <strong>и</strong>
<code>delete&#91;&#93;</code>
<strong>&#58;</strong>

- <code>delete</code>&#58; Используется для освобождения памяти, выделенной для
  одиночного объекта с помощью <code>new</code>.

  ```cpp
  int* p = new int;
  delete p;
  ```

- <code>delete&#91;&#93;</code>&#58; Используется для освобождения памяти,
  выделенной для массива объектов с помощью <code>new&#91;&#93;</code>.

  ```cpp
  int* arr = new int[10];
  delete[] arr;
  ```

<strong>Использование</strong> <code>delete</code> <strong>вместо</strong>
<code>delete&#91;&#93;</code> <strong>для объекта, созданного через</strong>
<code>new&#91;&#93;</code>
<strong>, приводит к неопределённому поведению. Это может вызвать&#58;</strong>

- Неполное освобождение памяти (утечка памяти).

- Потенциальные ошибки выполнения или сбои программы.

#### Рекомендация&#58;

Всегда использовать <code>delete&#91;&#93;</code> для освобождения памяти, выделенной с помощью <code>new&#91;&#93;</code>, чтобы избежать неопределённого поведения и корректно освободить всю выделенную память.

:::note[Ссылки для изучения]

1. [delete, new\[\] в C++ и городские легенды об их сочетании](https://habr.com/ru/companies/contentai/articles/117208/)
   :::

---

## <strong>Что такое</strong> <code>memory leak</code><strong>?</strong> [#q-14bee738d69b815f81bec733a1e5292b]

<strong>Memory leak (утечка памяти)</strong> — это ситуация, когда программа
выделяет память динамически (например, с помощью <code>new</code> или
<code>malloc</code>), но не освобождает её (с помощью <code>delete</code> или
<code>free</code>). В результате, используемая память остаётся занятой и
недоступной для повторного использования, что может привести к исчерпанию
доступной памяти и замедлению или краху программы.

:::note[Ссылки для изучения]

1. [Утечка памяти в C++](https://skillbox.ru/media/code/utechki_pamyati_v_c_chto_eto_takoe_i_chem_oni_opasny/)
   :::
