Библиотека C/C++ разработчика | cpp, boost, qt
19.7K subscribers
1.95K photos
60 videos
16 files
4.19K links
Все самое полезное для плюсовика и сишника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/d6cd2932

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
Download Telegram
🍪 Зачем нужен std::out_ptr, если есть &ptr?

Многие С++ разработчики передают &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! Старый объект утёк


🍿 Как работает out_ptr

std::out_ptr(ptr) создаёт временный proxy-объект. Он:

• Вызывает ptr.reset() при создании (освобождает старый ресурс)
• Предоставляет адрес внутреннего T** для C функции
• При уничтожении передаёт владение обратно в smart pointer

auto ptr = make_unique<Obj>();
CreateObject(std::out_ptr(ptr)); // Безопасно!


💡 Под капотом proxy хранит два указателя: временный 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 ₽.

Освежите знания вуза и примените их к современным задачам.

👉 Ссылка на регистрацию

Бонус:
Бесплатный тест
😁41
😎 Ranges в C++20: 3 материала, которые заставят забыть про итераторы

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