Многие С++ разработчики передают
&smart_ptr в C API, думая, что это безопасно. Спойлер: это undefined behavior, который может молча сломать ваш код.std::unique_ptr<T> — это не просто T*. Внутри он хранит указатель + deleter. Когда вы пишете CreateObject(&my_ptr), C функция записывает адрес напрямую в память smart pointer, минуя деструктор старого объекта.unique_ptr<Obj> ptr = make_unique<Obj>(); // ptr владеет объектом
CreateObject(&ptr); // UB! Старый объект утёк
std::out_ptr(ptr) создаёт временный proxy-объект. Он:• Вызывает ptr.reset() при создании (освобождает старый ресурс)
• Предоставляет адрес внутреннего T** для C функции
• При уничтожении передаёт владение обратно в smart pointer
auto ptr = make_unique<Obj>();
CreateObject(std::out_ptr(ptr)); // Безопасно!
T* для C API и ссылку на исходный smart pointer. Деструктор proxy вызывает ptr.reset(temp_ptr).out_ptr для output-параметров в C API.🔹Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹Сайт Proglib
Библиотека C/C++ разработчика
#под_капотом
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍4🔥2
Под капотом любого AI — C++ и Математика
Тензоры, матрицы, оптимизация вычислений — это родная стихия для C++ разработчика. Если вы хотите писать движки для нейросетей или работать в R&D, курс «Математика для разработки AI-моделей» — ваш следующий шаг.
⚡ Старт: Завтра.
⚡ Цена: 28 200 ₽.
Освежите знания вуза и примените их к современным задачам.
👉 Ссылка на регистрацию
Бонус: Бесплатный тест
Тензоры, матрицы, оптимизация вычислений — это родная стихия для C++ разработчика. Если вы хотите писать движки для нейросетей или работать в R&D, курс «Математика для разработки AI-моделей» — ваш следующий шаг.
⚡ Старт: Завтра.
⚡ Цена: 28 200 ₽.
Освежите знания вуза и примените их к современным задачам.
👉 Ссылка на регистрацию
Бонус: Бесплатный тест
😁4❤1
😎 Ranges в C++20: 3 материала, которые заставят забыть про итераторы
Ranges в C++20 — это «конвейер STL»: берёте контейнер, навешиваете
Вместо ручного
✍️ Материалы:
• C++20 Ranges in Practice — Tristan Brindle — пошаговый рефакторинг императивного кода с циклами в понятные pipelines
• New Algorithms in C++23 — развитие идеи: новые range‑алгоритмы, паттерны компоновки
• Introduction to C++20 Ranges and Composability — введение в C++ Ranges и обсуждение существующих возможностей библиотеки
Пробовали ranges в production? Какие задачи решились элегантнее всего?
🔹Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹Сайт Proglib
Библиотека C/C++ разработчика
#линкер_рекомендует
Ranges в C++20 — это «конвейер STL»: берёте контейнер, навешиваете
filter | transform | take и получаете читаемый, ленивый и безопасный пайплайн вместо вложенных циклов и временных векторов. Вместо ручного
std::transform/std::copy_if и контроля lifetime — цепочки std::views::filter | std::views::transform, как в bash, но type-safe и без лишних аллокаций. ✍️ Материалы:
• C++20 Ranges in Practice — Tristan Brindle — пошаговый рефакторинг императивного кода с циклами в понятные pipelines
std::views::filter | transform | take плюс разбор сгенерированного кода и стоимости абстракций• New Algorithms in C++23 — развитие идеи: новые range‑алгоритмы, паттерны компоновки
ranges::views и взгляд на C++ как язык обработки данных• Introduction to C++20 Ranges and Composability — введение в C++ Ranges и обсуждение существующих возможностей библиотеки
Пробовали ranges в production? Какие задачи решились элегантнее всего?
🔹Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹Сайт Proglib
Библиотека C/C++ разработчика
#линкер_рекомендует
👍3