auto_ptr | unique_ptr | shared_ptr | Умные указатели.  Изучение С++ для начинающих. Урок #131

auto_ptr | unique_ptr | shared_ptr | Умные указатели. Изучение С++ для начинающих. Урок #131

Введение

Обзор раздела: В этом уроке мы продолжаем изучать программирование на языке C++. Мы рассмотрим умные указатели и типы умных указателей в стандартной библиотеке C++.

Типы умных указателей

  • Умные указатели в стандартной библиотеке C++: unique_ptr, shared_ptr и weak_ptr.
  • Подключение библиотеки memory для использования классов умных указателей.
  • Проблема с обычными указателями при выходе из области видимости.
  • Пример с двумя объектами smartpoint, которые ссылается друг на друга.
  • Ошибки при освобождении памяти, когда несколько указателей ссылается на одни данные.
  • Решение проблемы с помощью умных указателей.

Указатель auto_ptr

  • Устаревший тип умного указателя - auto_ptr.
  • Описание auto_ptr и его схожесть с unique_ptr.

Заключение

  • Пример использования auto_ptr.
  • Объяснение работы auto_ptr при передаче данных между указателями.
  • Пояснение о пустом указателе и отсутствии ошибок.

В данном уроке мы рассмотрели типы умных указателей в стандартной библиотеке C++ - unique_ptr, shared_ptr и weak_ptr. Также был упомянут устаревший тип auto_ptr. Мы изучили проблемы, связанные с обычными указателями, и как эти проблемы решаются с помощью умных указателей.

Выход из области видимости функции main

Обзор раздела: В этом разделе рассматривается выход из области видимости функции main и проблемы, связанные с использованием указателей.

Указатели и выход из области видимости функции main

  • При выходе из области видимости функции main, все указатели на динамическую память становятся недействительными.
  • Для предотвращения ошибок при работе с указателями, можно использовать умные указатели, такие как unique_ptr и shared_ptr.
  • Уникальный (unique_ptr) указатель не позволяет передавать владение данными другому указателю.
  • Для передачи владения данными от одного уникального указателя к другому используется метод move.
  • Метод swap позволяет поменять местами данные двух умных указателей типа unique_ptr.

Дополнительные методы для работы с умными указателями

  • Метод get возвращает сырой указатель на данные, хранящиеся в умном указателе.
  • Методы reset и release позволяют освободить или забыть о данных, хранящихся в умном указателе.

Shared Pointer Общий указатель

Обзор раздела: В этом разделе рассматривается использование общего (shared) указателя для работы с данными в динамической памяти.

Работа с общими указателями

  • Общий (shared_ptr) указатель позволяет нескольким указателям владеть одними и теми же данными.
  • При использовании общих указателей, данные будут удалены только после выхода из области видимости последнего shared pointer'а, который ссылается на эти данные.

Sheered Pointer Указатель на общую память

Обзор раздела: В этом разделе рассматривается использование sheered pointer для работы с данными в динамической памяти.

Использование sheered pointer

  • Sheered (sheered_ptr) pointer также позволяет нескольким указателям владеть одними и теми же данными.
  • Однако, sheered pointer не удаляет данные при выходе из области видимости последнего указателя.

Статические переменные в классах

Обзор раздела: В этом разделе рассматривается использование статических переменных в классах и их особенности.

Использование модификатора static для переменных

  • При присвоении модификатора static целочисленной переменной в классе, значение этой переменной будет одинаковым для всех объектов класса.
  • Это позволяет обеспечить единое значение переменной для всех экземпляров класса.

Пример использования статической переменной

  • Создаем целочисленную переменную count с модификатором static, которая отвечает за подсчет ссылок на данные.
  • При создании нового объекта типа Point и присваивании ему значения первого указателя p1, значение count увеличивается на 1.
  • Теперь у нас есть две ссылки на те же самые данные.

Умные указатели и автоматизированное освобождение памяти

  • Умные указатели предназначены для автоматизации освобождения выделенной динамической памяти.
  • При уничтожении объектов, у которых есть ссылки на данные, проверяется количество ссылок. Если это последний объект, то данные также удаляются.
  • Это позволяет автоматически освобождать память и избежать утечек.

Шеред-указатель (shared_ptr)

  • shared_ptr является самым популярным и полезным из умных указателей.
  • Он позволяет работать с разными объектами, которые владеют одними и теми же данными.
  • shared_ptr обеспечивает автоматическое освобождение памяти и управление ссылками на данные.

Заключение

Обзор раздела: В этом разделе подводятся итоги урока и предлагается подписаться на канал для получения дополнительной информации.

  • Если вам понравился урок, поставьте лайк под видео.
  • Поделитесь этим уроком с друзьями, которые также изучают программирование.
  • Подпишитесь на канал, чтобы не пропустить новые полезные уроки.
  • Информацию о том, как поддержать развитие канала, можно найти в описании видео.
Video description

Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =) ✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ Если вам нравятся мои уроки, вы хотите поддержать меня и развитие канала, то можете сделать это тут!=) 🔴🔴🔴 http://www.donationalerts.ru/r/simplecode или тут 🔴🔴🔴 https://www.patreon.com/SimpleCode ✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ Уроки по программированию Наша группа ВК https://vk.com/smplcode Подписывайтесь на канал https://www.youtube.com/channel/UCtLKO1Cb2GVNrbU7Fi0pM0w