🚀 Небольшие улучшения безопасности в ядре языка C++26 🔍 Что важно: язык C++ версии 26 получает сразу несколько «малых» - но значимых - изменений, напр…
🔍 Что важно: язык C++ версии 26 получает сразу несколько «малых» - но значимых - изменений, направленных на повышение безопасности кода.
🔧 Основные нововведения:
1. Запрет связывания возвращённой ссылки с временным объектом
Ранее можно было возвращать ссылку на временный объект, что приводило к висячим ссылкам и неявным ошибкам. Теперь это будет запрещено.
2. Изменение поведения при чтении неинициализированных значений
В C++23 чтение неинициализированной переменной = неопределённое поведение. В C++26 такие случаи станут ошибками.
- При этом для экспертных случаев остаётся атрибут [[indeterminate]], который позволяет отключать полную инициализацию, когда это оправдано.
3. Удаление указателя на неполный тип становится ill-formed
Если тип неполон и у него не тривиальный деструктор или перегружен operator delete, то delete ptr; будет вызывать ошибку компиляции.
🎯 Важно:
- Повышает общую надёжность и безопасность кода.
- Улучшает диагностику ошибок на уровне языка, не только по статическому анализу.
- Упрощает корректное использование памяти и типов.
- Особенно актуально для больших и долгоживущих проектов на C++.
📌 Что делать:
- Проверить свой код на случаи возврата ссылок на временные объекты.
- Убедиться, что не читаются неинициализированные переменные - либо использовать [[indeterminate]] там, где это оправдано.
- Проверить конструкции delete на указателях на неполные типы.
- Следить за компиляторами и настройками: когда C++26-поддержка станет доступной, и начать адаптацию.
https://www.modernescpp.com/index.php/small-safety-improvements-in-the-c-26-core-language/
#cpp #programming
👉 @cpp_lib