Память и ресурсы
мастер C++Модель владения — от необработанных указателей до умных указателей и семантики движения — для написания кода, который никогда не просачивается.
Указатели и ссылки
Указатели: адреса, отсылки и арифметика
Поймите указатели как адреса памяти, изучите адресные и дереферативные операторы, арифметику указателей в массивах, точность с указателями и когда необработанные указатели все еще уместны в современном C++.
Оригинальное название: Lvalue, Rvalue & Pitfalls
Исследуйте ссылки на lvalue и rvalue, поймите категории значений C++, изучите правила свертывания ссылок и ссылки пересылки и избегайте болтающихся ошибок ссылки.
Динамическая память: новые, удаленные и их опасности
Узнайте, как динамическое распределение работает с новым и удалять, понять опасности утечек памяти, двойной-бесплатно, и использовать-после-бесплатно, и узнать, почему современный C++ должен содержать ноль сырой новый / удалить.
Умный указатель
std::unique ptr: Эксклюзивное право собственности
Узнайте, как std::unique ptr обеспечивает эксклюзивную собственность с нулевыми накладными расходами, как использовать make unique, пользовательские удаляющие устройства для ресурсов C и шаблоны фабричных функций.
Shared ptr, weak ptr & Ownership
Поймите, что такое совместное владение с shared ptr, разбейте циклы со слабым ptr, узнайте о блоках управления и псевдонимах и узнайте, когда shared ptr является неправильным выбором.
Семантика и RAII
Семантика перемещения и std::move
Поймите, как решается семантика движения задачи, как std::move является литой (а не движением), реализуйте конструкторы движения и назначение движения, и узнайте, почему нет исключений, имеющих решающее значение для производительности контейнера.
Идеальное продвижение и std::forward
Поймите, почему ссылки на rvalue являются lvalues, изучите канонический паттерн пересылки с помощью std::forward и посмотрите, как emplace back использует вариадную пересылку для создания объектов на месте.
RAII: модель фундаментальных ресурсов
Изучите RAII (Resource Acquisition Is Initialization) — базовый шаблон C++ для управления ресурсами, безопасными для исключений. Внедрите обертки RAII, поймите lock guard и scoped lock и узнайте, почему типы RAII должны быть только для перемещения или пересчитаны.