C++_BE1
406 subscribers
278 photos
1 video
42 files
519 links
Канал по C/C++, полезный и интересный контент для всех уровней.
По вопросам сотрудничества @cyberJohnny
Download Telegram
➡️ Обнаружение утечек памяти с использованием нестандартного оператора new в C++

В C++ утечки памяти могут стать серьезной проблемой, особенно в больших проектах. Один из способов обнаружения утечек памяти — переопределение оператора new, чтобы отслеживать выделение и освобождение памяти.

• Мы переопределяем оператор new, чтобы отслеживать все выделения памяти, сохраняя указатели и размеры выделенных блоков в std::map.

• Переопределение оператора delete позволяет отслеживать освобождение памяти. Когда память освобождается, соответствующая запись удаляется из allocations.

• В конце программы проверяется, остались ли неосвобожденные участки памяти, что позволяет обнаружить утечки.

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
Что будет выведено при выполнении кода?

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
➡️ Оператор decltype для создания зависимых типов в C++

В C++ оператор decltype позволяет определить тип переменной на основе типа другого выражения. Это особенно полезно в шаблонном программировании для создания зависимых типов, когда точный тип заранее неизвестен.

• Оператор decltype определяет тип sum на основе типа элементов, возвращаемых итератором контейнера. Это позволяет избежать жесткого кодирования типов и делает код более гибким.

• Использование decltype в шаблонных функциях позволяет писать более универсальный код, который корректно работает с различными типами контейнеров.

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
👍2
➡️ Использование static_assert для компиляционных проверок

static_assert — это мощный инструмент в C++, который позволяет проверять условия на этапе компиляции.

• Он особенно полезен для проверки инвариантов, размеров типов или других свойств, которые должны быть выполнены перед компиляцией кода.

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
Что будет выведено при выполнении кода?

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
➡️ Использование std::launder для работы с переинициализированными объектами

В C++17 появился новый инструмент — std::launder, который решает проблему с доступом к объектам, которые были переинициализированы в той же области памяти.

• Это довольно специфичная и редко используемая функция, но она может оказаться крайне полезной в определенных ситуациях.

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
➡️ Управление ресурсами с помощью std::scoped_lock для нескольких мьютексов

В C++17 был представлен std::scoped_lock, который позволяет одновременно захватывать несколько мьютексов, гарантируя отсутствие взаимных блокировок (deadlocks).

• Этот класс позволяет безопасно и одновременно захватывать несколько мьютексов. В отличие от использования std::lock_guard, который захватывает один мьютекс, std::scoped_lock предотвращает взаимные блокировки, которые могут возникнуть при попытке захвата нескольких мьютексов в произвольном порядке.

• std::scoped_lock полезен в ситуациях, когда нужно гарантировать атомарность операций над несколькими разделяемыми ресурсами, минимизируя риск deadlock'ов.

• При выходе из области видимости, std::scoped_lock автоматически отпускает все захваченные мьютексы, обеспечивая безопасное управление ресурсами.

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
Что будет выведено при выполнении кода?

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
➡️ Библиотека Boost.Hana

• Boost.Hana — это библиотека для метапрограммирования в C++, которая предоставляет мощные инструменты для работы с типами и компиляции вычислений. Она позволяет реализовывать сложные вычисления на этапе компиляции, используя функциональный стиль программирования.

• Boost.Hana особенно полезна, если вам нужно использовать метапрограммирование в C++ для создания сложных, но эффективных решений. Если вы хотите попробовать что-то новое в области метапрограммирования, обратите внимание на эту библиотеку.

🔗 Ссылочка на доку (https://www.boost.org/doc/libs/1_86_0/libs/hana/doc/html/index.html)

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
🔴 18 сентября состоится крупнейшая конференция по трафику и продажам в Телеге

1⃣2⃣3⃣4⃣5⃣

Вам однозначно стоит быть, если:

— Работаете с трафиком из Telegram Ads или посевов;
— Продаете свои услуги через Telegram;
— Еще не зарабатываете в TG, но планируете;

📣 Вот лишь некоторые из спикеров:

— Алексей Соловьев (Event and Community Manager at TON)
— Дмитрий Форман (Digital-Директор Самолет)
— Марат Шайхетдинов (Founder TgConf & Clickise)
— Ирина Нумизматка (Автор крупнейшего блога про Telegram Ads)
— Глеб Яскевич (Директор по маркетингу Getcourse)
— Артур Халиуллин (Сеть каналов на 1млн+ подписчиков)
— Влад Силантьев (С нуля дошел до 63 проектов в Telegram Ads)
— Павел Калюканов (Product Manager TgStat)
и множество других не менее интересных спикеров

🕔 Дата и время: 18 сентября в 9:00
📍 Место проведения: Main Stage, Москва

А в заключении мероприятия пройдет Aftertparty для VIP-участников и спикеров с хедлайнером, которого все знают!

🎟 Приобрести билет до повышения цен (https://tgconf.ru/?utm_source=partners&utm_medium=cpm&utm_campaign=marketer_prPython_per_month)
Промокод telegapart дает скидку 10% на все билеты
➡️ Сжатие данных с использованием std::vector::shrink_to_fit

std::vector::shrink_to_fit — метод, который позволяет уменьшить емкость вектора до его фактического размера. Это полезно, когда нужно освободить память, занимаемую неиспользуемыми элементами, особенно после значительного сокращения размера вектора.

• Вектор заполняется 100 элементами, после чего большая часть элементов удаляется. Использование shrink_to_fit позволяет уменьшить емкость вектора до текущего количества элементов, что освобождает ненужную память.

• Используйте shrink_to_fit, когда нужно минимизировать использование памяти после удаления большого числа элементов из вектора. Это улучшает производительность и снижает потребление ресурсов, что особенно важно в средах с ограниченной памятью.

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
➡️ Оптимизация доступа к элементам через std::deque с использованием индексации

std::deque — это контейнер, который позволяет эффективное добавление и удаление элементов как с начала, так и с конца. В отличие от std::vector, std::deque обеспечивает постоянное время доступа к элементам как в начале, так и в конце контейнера.

• Используйте std::deque в тех случаях, когда вам нужен быстрый доступ к элементам по индексу, но также важна возможность эффективного добавления и удаления элементов с обоих концов контейнера.

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
➡️ Boost.MultiIndex — мощная библиотека для работы с контейнерами с множественной индексацией

Boost.MultiIndex — это часть популярной библиотеки Boost, которая предоставляет контейнеры с возможностью множественной индексации данных. Она позволяет хранить элементы в одном контейнере, но доступ к ним может осуществляться по разным критериям. Эта библиотека объединяет функциональность стандартных контейнеров, таких как std::set и std::map, в одном универсальном решении.

• Boost.MultiIndex — отличный выбор, если вам нужно эффективно управлять данными с различными критериями поиска и сортировки. Она упрощает создание сложных структур данных, поддерживающих несколько способов доступа к элементам.

🔗 Ссылочка на доку (https://www.boost.org/doc/libs/1_86_0/libs/multi_index/doc/index.html)

C++ Learning (https://t.me/Learning_pluses) 👩‍💻
➡️ Библиотека SOCI — удобная работа с базами данных в C++

SOCI (The C++ Database Access Library) — это библиотека, которая упрощает взаимодействие с различными базами данных, такими как PostgreSQL, MySQL, SQLite, и Oracle. Она предоставляет интерфейс, похожий на SQL, и позволяет работать с базами данных, используя простые и понятные C++-конструкции.

• SOCI — отличный выбор для разработчиков, которым нужно легко интегрировать базы данных в C++ проекты, не жертвуя производительностью и удобством.

🔗 Ссылочка на доку (https://github.com/SOCI/soci)

C++ Learning (https://t.me/Learning_pluses) 👩‍💻