Объекты · Классы и память

Умные указатели

unique_ptr и shared_ptr: владение, записанное в типе

~30 мин 6 шагов

После урока ты сможешь

  • Создавать объекты через std::make_unique
  • Понимать уникальное и разделяемое владение
  • Выбирать: значение, unique_ptr, shared_ptr или ссылка

Шаг 1 из 6

Кто владеет объектом

Обычно объекты живут в переменных и контейнерах, и про память думать не нужно. Но иногда объект должен жить в динамической памяти (куче):

  • размер или тип объекта известен только во время работы программы;
  • объект очень большой;
  • нужен полиморфизм: vector разных фигур через общий интерфейс (следующие уроки);
  • структура ссылается сама на себя: дерево, связный список.

Раньше для этого писали new/delete и молились, что delete вызовется ровно один раз. Современный ответ — умные указатели: RAII-объекты, которые владеют объектом в куче и удаляют его в своём деструкторе.