std::launder существует потому, что C++ нарушил собственные правила.
Автор: ByteClocker
Загружено: 2026-03-13
Просмотров: 11666
Описание:
В C++ допустимый адрес памяти всё ещё может быть совершенно недопустимым для использования. Если вы когда-либо использовали оператор размещения new для условной инициализации объекта в буфере необработанной памяти, ваш старый оператор reinterpret_cast может оказаться бомбой замедленного действия, способной вызвать неопределённое поведение.
В этом подробном обзоре C++ мы рассмотрим, почему C++ нарушил собственные правила модели памяти, чтобы использовать агрессивные оптимизации компилятора (такие как девиртуализация и свертывание констант), и почему C++17 пришлось изобрести совершенно новую библиотечную функцию, чтобы исправить эту проблему: *std::launder*.
В этом видео мы рассмотрим:
Загадку условной инициализации (и почему компилятор блокирует её).
Ловушку времени жизни объекта и происхождения указателя в C++.
Почему компилятор имеет законное право игнорировать ваш новый объект и кэшировать старую память.
Как правильно управлять оператором размещения new без возникновения масштабных утечек памяти.
Понимание того, как работают такие вещи, как std::optional и аллокаторы игрового движка, — ключ к освоению современного C++. Перестаньте бороться с компилятором и начните понимать его правила.
👇 *Подпишитесь*, чтобы получать больше подробных обзоров современного C++
Полезные ссылки:
https://en.cppreference.com/w/cpp/uti...
https://www.open-std.org/jtc1/sc22/wg...
https://stackoverflow.com/questions/3...
#cpp #cplusplus #programming #softwareengineering #gamedev
Повторяем попытку...
Доступные форматы для скачивания:
Скачать видео
-
Информация по загрузке: