9. Приведение типа в С++: static_cast, dynamic_cast, const_cast, reinterpret_cast.
«Умные указатели» в С++: unique_ptr, shared_ptr, weak_ptr. Контейнерные классы и итераторы. Работа с итераторами. Цикл for для работы с контейнерными объектами.
Приведение типа в C++
Основные типы приведения
static_cast
Используется для явного приведения типов. Безопасен при корректном использовании, но не проверяет типы во время выполнения.
Применим для приведения между базовым и производным классами (если гарантирована правильность приведения).
dynamic_cast
Используется для безопасного приведения между указателями или ссылками в иерархии классов с виртуальными методами.
Проверяет тип во время выполнения и возвращает
nullptr
(для указателей) или выбрасывает исключениеstd::bad_cast
(для ссылок), если приведение неудачно.
const_cast
Используется для добавления или удаления квалификатора
const
из переменной.Безопасен, если используется для снятия
const
с переменной, которая изначально не былаconst
.
reinterpret_cast
Используется для низкоуровневого приведения типов.
Применяется для приведения указателей к несовместимым типам, но может быть небезопасным.
«Умные указатели» в C++
Умные указатели из стандартной библиотеки C++ (C++11 и выше) помогают управлять динамическими ресурсами и предотвращать утечки памяти.
unique_ptr
Управляет уникальным владением ресурсом. Ресурс освобождается при уничтожении
unique_ptr
.Нельзя копировать
unique_ptr
, но можно перемещать.
shared_ptr
Управляет совместным владением ресурсом. Ресурс освобождается, когда последний
shared_ptr
перестает им владеть.Поддерживает подсчет ссылок для отслеживания количества владельцев ресурса.
weak_ptr
Отслеживает ресурс, управляемый
shared_ptr
, но не влияет на его срок жизни.Используется для устранения циклических зависимостей между
shared_ptr
.
Контейнерные классы и итераторы
Основные контейнеры STL
std::vector
Динамически изменяемый массив.
std::list
Двусвязный список.
std::set
Множество, содержащие уникальные элементы, упорядоченные по значению.
std::map
Ассоциативный массив (словарь), хранящий пары ключ-значение.
Итераторы
Основные типы итераторов
InputIterator
: Поддерживает чтение из последовательности.OutputIterator
: Поддерживает запись в последовательность.ForwardIterator
: Поддерживает однонаправленное перемещение.BidirectionalIterator
: Поддерживает движение вперед и назад.RandomAccessIterator
: Поддерживает произвольный доступ, аналогично указателям.
Использование итераторов
Итераторы позволяют абстрагироваться от конкретного контейнера и работать с элементами в стандартной манере.
Цикл for для контейнерных объектов (range-based for)
Упрощает итерацию по контейнерам, введенный в C++11.
Last updated