Description
Основная цель этого курса — научить идиомам языка C++, то есть показать, как с помощью различных возможностей языка создавать элегантные, эффективные и надёжные блоки кода. В совокупности со знаниями, полученными на «Красном поясе», это позволит вам создавать не только быстрые и легко поддерживаемые программы. Кроме того, будут освещены темы, которые не поместились в объём предыдущих курсов: пространства имён и эффективное использование ассоциативных контейнеров.
Syllabus :
1. Эффективное использование ассоциативных контейнеров
- Введение в ассоциативные контейнеры
- Размен отсортированности на производительность
- Введение в хеш-функции
- Внутреннее устройство unordered_map
- Внутреннее устройство map
- Итераторы в map/set. Почему лучше использовать собственные методы для поиска.
- Итераторы в unordered_map. Инвалидация итераторов в ассоциативных контейнерах
- Использование пользовательских типов в ассоциативных контейнерах
- Зависимость производительности от хеш-функции
- Рекомендации по выбору хеш-функции
- extract и merge
- Итоги. Рекомендации по выбору.
2. Пространства имён и указатель this
- Знакомство с учебным примером
- Постановка проблемы, пересечение имён двух разных библиотек
- Знакомство с пространствами имён
- Особенности синтаксиса пространств имён
- Using-декларация
- Директива using namespace
- Глобальное пространство имён
- using namespace в заголовочных файлах
- Пространство имён std
- Структурирование кода с использованием пространств имён
- Рекомендации по использованию пространств имён
- Присваивание объекта самому себе
- Знакомство с this
- Ссылка на себя
- this как неявный параметр методов класса
3. Константность и unique_ptr
- Введение
- const защищает от случайного изменения
- Использование const для поддержания инвариантов в классах и объектах
- Идиома immediately invoked lambda expression (IILE)
- Константные объекты в многопоточных программах
- Логическая константность и mutable
- Ещё раз о константности в многопоточной среде
- Рекомендации по использованию const
- Умные указатели - введение
- Обнаружение утечки памяти в ObjectPool
- Откуда берётся утечка памяти?
- Умный указатель unique_ptr
- unique_ptr для исправления утечки
- Разбор задачи "Дерево выражения"
4. shared_ptr и RAII
- Умный указатель shared_ptr
- shared_ptr в дереве выражения
- Внутреннее устройство умных указателей
- Владение, часть
- Присваивание умных указателей
- shared_ptr и многопоточность
- Умный указатель weak_ptr
- Пользовательский deleter
- Знакомство с редактором vim и консольным компилятором
- Жизненный цикл объекта
- Идея RAII
- RAII-обёртка над файлом
- Копирование RAII-обёрток
- RAII вокруг нас
- Разбор задачи
5. Функции: принципы понятного кода
- Зачем нужны функции?
- Функции или методы классов?
- Какими должны быть функции?
- Философия понятного кода
- Как передать объект в функцию
- Как передать в функцию набор объектов
- Как вернуть объект из функции
- Как вернуть несколько объектов из функции
- Возврат данных через исключения
- Понятность вызовов конструкторов
- Как рефакторить конструкторы с непонятными сигнатурами