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 обеспечивает автоматическое освобождение памяти и управление ссылками на данные.
Заключение
Обзор раздела: В этом разделе подводятся итоги урока и предлагается подписаться на канал для получения дополнительной информации.
- Если вам понравился урок, поставьте лайк под видео.
- Поделитесь этим уроком с друзьями, которые также изучают программирование.
- Подпишитесь на канал, чтобы не пропустить новые полезные уроки.
- Информацию о том, как поддержать развитие канала, можно найти в описании видео.