Андрей Воробьев /* andreivorobev.su */

@channel_av
Краткий обзор полезных C++ идиом (из вебинара PVS: "Каждая идиома когда-то была проблемой") На обеде "полистал" видео из вебинара PVS Studio: "Каждая идиома когда-то была проблемой" [0] (на скорости 1.75x вполне нормально). Первая мысль по ходу просмотра: какой идиот придумал такой формат (видео, без содержания и без таймкодов) для материала с техническим уклоном? Вторая мысль: 2 часа видео, даже на 1.75x - кошмар! Хорошо, что сейчас вторая половина 2026 и можно воспользоваться нейросетями. Через Гигачат получил краткий пересказ-содержание с таймкодами [1], вот в таком виде с этим техническим материалом можно работать и потреблять интересные темы из него. Судя по темам и той части видео, что я посмотрел - этот вебинар как раз то что надо для изучающих ЯП C++, это даст шанс мне не вляпаться в кучу C++-проблем, темы обсуждаются вполне общие (хотя на видео постоянно упоминается про разработку игр, это можно просто игнорировать). === === === Дублирую здесь краткое содержание вебинара (по таймкодам), которое сделал Гигачат [1]: Вступление и цель вебинара 00:12–02:53: Приветствие. Спикеры — Александра Уварова (PVS-Studio) и Сергей Кушниренко (разработчик игровых движков). Тема: реальные ошибки в коде на C++ из открытых проектов, анализ с помощью статического анализа, разбор идиом для улучшения кода. О PVS-Studio и анализе open-source проектов 02:46–03:57: Описание PVS-Studio, её роли в поиске ошибок, статистика по открытым проектам (более 17 тыс. найденных ошибок). Примеры реальных проблем управления ресурсами 04:09–06:08: Пример утечки файла (DPTK), проблема двойного освобождения вектора (Telegram). Причина — ручное управление ресурсами. RAII и его применение в геймдеве 06:21–10:33: Объяснение RAII (Resource Acquisition Is Initialization): история термина, как помогает избежать утечек ресурсов. Примеры использования в играх: стриминг, биндинг текстур, откат ненужных данных. ScopeGuard и отложенное освобождение ресурсов 10:39–14:14: ScopeGuard — инструмент для автоматизации логики очистки при выходе из блока. В геймдеве часто используют списки отложенных действий, чтобы не снижать производительность горячего цикла. Умные указатели (smart pointers) и их проблемы 22:00–27:05: Появление shared_ptr, unique_ptr после C++11; почему auto_ptr был неудачным экспериментом. Проблемы производительности и накладные расходы у shared_ptr. Особенности применения умных указателей в быстром коде игр. Проблемы с циклическими ссылками и raw-приемами 27:00–28:50: Циклы ссылок между объектами приводят к утечкам памяти. Избегайте явного получения сырого указателя из shared_ptr. Пример ошибки с типизацией smart pointer 28:20–29:11: Ошибка в Chromium: неправильный тип умного указателя приводит к неопределённому поведению при удалении массива через обычный delete. Forward declaration и необходимость явного деструктора 29:34–32:26: При использовании forward-declaration важно явно объявлять деструктор класса и реализовывать его в .cpp-файле, иначе компилятор создаст некорректную реализацию удаления объекта. Опасности неверного возврата ссылок 32:40–36:12: Возвращение ссылки на временный объект вызывает неопределённое поведение. Правильное решение — избегать лишних оптимизаций вручную или использовать copy elision. Move-семантика и Resource Return 36:30–44:06: До C++11 отсутствовала семантика перемещения объектов. Теперь компиляторы могут перемещать объекты без копирования, что особенно полезно для строк, массивов, сложных структур. Обсуждаются нюансы реализации move-конструкции и возможные подводные камни. Правила трёх/пяти функций для классов 52:16–58:12: Почему нужно реализовать все специальные функции класса (конструкторы копирования/перемещения, операторы присваивания, деструктор). Нарушение правил ведёт к ошибкам владения памятью и утечкам. … Читать на сайте: http://andreivorobev.su/2026/brief-overview-useful-cpp-idioms.html
Если у вас установлено приложение,
вы можете сразу перейти в канал