Перейти к содержимому
Модуль 3

Память и ресурсы

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

Указатели и ссылки

  1. Указатели: адреса, отсылки и арифметика

    Поймите указатели как адреса памяти, изучите адресные и дереферативные операторы, арифметику указателей в массивах, точность с указателями и когда необработанные указатели все еще уместны в современном C++.

  2. Оригинальное название: Lvalue, Rvalue & Pitfalls

    Исследуйте ссылки на lvalue и rvalue, поймите категории значений C++, изучите правила свертывания ссылок и ссылки пересылки и избегайте болтающихся ошибок ссылки.

  3. Динамическая память: новые, удаленные и их опасности

    Узнайте, как динамическое распределение работает с новым и удалять, понять опасности утечек памяти, двойной-бесплатно, и использовать-после-бесплатно, и узнать, почему современный C++ должен содержать ноль сырой новый / удалить.

Умный указатель

  1. std::unique ptr: Эксклюзивное право собственности

    Узнайте, как std::unique ptr обеспечивает эксклюзивную собственность с нулевыми накладными расходами, как использовать make unique, пользовательские удаляющие устройства для ресурсов C и шаблоны фабричных функций.

  2. Shared ptr, weak ptr & Ownership

    Поймите, что такое совместное владение с shared ptr, разбейте циклы со слабым ptr, узнайте о блоках управления и псевдонимах и узнайте, когда shared ptr является неправильным выбором.

Семантика и RAII

  1. Семантика перемещения и std::move

    Поймите, как решается семантика движения задачи, как std::move является литой (а не движением), реализуйте конструкторы движения и назначение движения, и узнайте, почему нет исключений, имеющих решающее значение для производительности контейнера.

  2. Идеальное продвижение и std::forward

    Поймите, почему ссылки на rvalue являются lvalues, изучите канонический паттерн пересылки с помощью std::forward и посмотрите, как emplace back использует вариадную пересылку для создания объектов на месте.

  3. RAII: модель фундаментальных ресурсов

    Изучите RAII (Resource Acquisition Is Initialization) — базовый шаблон C++ для управления ресурсами, безопасными для исключений. Внедрите обертки RAII, поймите lock guard и scoped lock и узнайте, почему типы RAII должны быть только для перемещения или пересчитаны.

Расширенная память

  1. Планировка памяти, выравнивание и представление объектов

    Поймите требования к настройке структуры и выравниванию, оптимизируйте заказ членов для размера, узнайте о кэш-линиях и ложном совместном использовании и используйте функции C++20, такие как [[no unique address]] для компактных макетов.