Шпаргалка по использованию умных указателей в C++
Благодаря наличию исключений, язык C++ позволяет разделить основную логику приложения и обработку ошибок, не мешая их в одну кучу. Что есть очень хорошо. Однако теперь по коду нельзя с уверенностью сказать, где может быть прервано его исполнение. Отсюда возникает опасность утечки ресурсов. Проблема эта решается при помощи деструкторов и идиомы RAII. Впрочем, придерживаться этой идиомы становится проблематично при использовании указателей. Особенно при использовании их не как членов класса, а просто как переменных в методах. На наше с вами счастье, в стандартной библиотеке языка есть умные указатели (smart pointers), придуманные именно для этого случая. Поскольку на C++ я пишу не регулярно, то иногда забываю некоторые нюансы использования умных указателей, в связи с чем решил вот набросать небольшую шпаргалку.
https://telegra.ph/SHpargalka-po-ispolzovaniyu-umnyh-ukazatelej-v-C-10-18
#cpp #programming
👉 @cpp_lib
Благодаря наличию исключений, язык C++ позволяет разделить основную логику приложения и обработку ошибок, не мешая их в одну кучу. Что есть очень хорошо. Однако теперь по коду нельзя с уверенностью сказать, где может быть прервано его исполнение. Отсюда возникает опасность утечки ресурсов. Проблема эта решается при помощи деструкторов и идиомы RAII. Впрочем, придерживаться этой идиомы становится проблематично при использовании указателей. Особенно при использовании их не как членов класса, а просто как переменных в методах. На наше с вами счастье, в стандартной библиотеке языка есть умные указатели (smart pointers), придуманные именно для этого случая. Поскольку на C++ я пишу не регулярно, то иногда забываю некоторые нюансы использования умных указателей, в связи с чем решил вот набросать небольшую шпаргалку.
https://telegra.ph/SHpargalka-po-ispolzovaniyu-umnyh-ukazatelej-v-C-10-18
#cpp #programming
👉 @cpp_lib
Telegraph
Шпаргалка по использованию умных указателей в C++
Благодаря наличию исключений, язык C++ позволяет разделить основную логику приложения и обработку ошибок, не мешая их в одну кучу. Что есть очень хорошо. Однако теперь по коду нельзя с уверенностью сказать, где может быть прервано его исполнение. Отсюда возникает…
👍3
Реализация алгоритма SHA-256
SHA (Алгоритмы безопасного хеширования) – это семейство криптографических хэш-функций, способных принимать сообщения произвольной длины и вычислять уникальный хэш-код фиксированной длины. Хэш-код SHA может быть использован для проверки целостности сообщения, а также для генерации цифровой подписи сообщения. На данный момент существует несколько стандартов безопасного алгоритма, каждый последующий включает более надёжные хэш-функции.
https://habr.com/ru/articles/729260/
#cpp #programming
👉 @cpp_lib
SHA (Алгоритмы безопасного хеширования) – это семейство криптографических хэш-функций, способных принимать сообщения произвольной длины и вычислять уникальный хэш-код фиксированной длины. Хэш-код SHA может быть использован для проверки целостности сообщения, а также для генерации цифровой подписи сообщения. На данный момент существует несколько стандартов безопасного алгоритма, каждый последующий включает более надёжные хэш-функции.
https://habr.com/ru/articles/729260/
#cpp #programming
👉 @cpp_lib
👍2❤1
Многопоточность и Thread Pool в C++
За время работы в сфере IT у меня появилась своя собственная библиотека на языке C++, которая медленно, но верно обрастает различными полезными модулями. Не все включаемые в нее модули написаны мною с нуля, но я всегда стараюсь так или иначе адаптировать их под свои нужды. Сегодня у меня появилось непреодолимое желание поделиться с вами некоторыми фрагментами моей библиотеки.
https://habr.com/ru/articles/738250/
#cpp #programming
👉 @cpp_lib
За время работы в сфере IT у меня появилась своя собственная библиотека на языке C++, которая медленно, но верно обрастает различными полезными модулями. Не все включаемые в нее модули написаны мною с нуля, но я всегда стараюсь так или иначе адаптировать их под свои нужды. Сегодня у меня появилось непреодолимое желание поделиться с вами некоторыми фрагментами моей библиотеки.
https://habr.com/ru/articles/738250/
#cpp #programming
👉 @cpp_lib
👍2😱1
This media is not supported in your browser
VIEW IN TELEGRAM
Показываем видео в терминале
Приветствую, сегодня я опробую OpenCV, библиотеку для работы с видео, на примере простой задачи - символами ASCII вывести видеоролик в терминал.
Начнем с алгоритма, он вполне интуитивен:
- Загружаем видео
- Покадрово по нему проходимся, пока кадры не закончатся, для каждого кадра:
- Делаем черно-белым
- Скейлим его до нужных нам размеров (размеров консоли)
- Перебираем пиксели слева направо, сверху вниз, для каждого пикселя:
- Получаем его яркость
- Ставим в соответствие его яркости символ, который имеет схожую яркость (более яркий символ - значит содержит в себе больше пикселей)
- Записываем полученный символ в строку для вывода
- Выводим эту строку
https://habr.com/ru/articles/768456/
#cpp #programming
👉 @cpp_lib
Приветствую, сегодня я опробую OpenCV, библиотеку для работы с видео, на примере простой задачи - символами ASCII вывести видеоролик в терминал.
Начнем с алгоритма, он вполне интуитивен:
- Загружаем видео
- Покадрово по нему проходимся, пока кадры не закончатся, для каждого кадра:
- Делаем черно-белым
- Скейлим его до нужных нам размеров (размеров консоли)
- Перебираем пиксели слева направо, сверху вниз, для каждого пикселя:
- Получаем его яркость
- Ставим в соответствие его яркости символ, который имеет схожую яркость (более яркий символ - значит содержит в себе больше пикселей)
- Записываем полученный символ в строку для вывода
- Выводим эту строку
https://habr.com/ru/articles/768456/
#cpp #programming
👉 @cpp_lib
👍2🔥2
Forwarded from Книги для программистов C/C++
Язык программирования C++. Краткий курс
Бьёрн Страуструп (2019)
Это краткое самодостаточное руководство охватывает основные функциональные возможности языка и основные компоненты стандартной библиотеки — пусть и не с полной глубиной изложения материала, однако на высоком профессиональном уровне. Книга включает множество конкретных примеров, которые облегчают изучение данного языка программирования.
Скачать книгу
👉 @cpp_knigi
Бьёрн Страуструп (2019)
Это краткое самодостаточное руководство охватывает основные функциональные возможности языка и основные компоненты стандартной библиотеки — пусть и не с полной глубиной изложения материала, однако на высоком профессиональном уровне. Книга включает множество конкретных примеров, которые облегчают изучение данного языка программирования.
Скачать книгу
👉 @cpp_knigi
👍7🔥2🤮1
Глубина кроличьей норы: бинарная граница и ABI C++
Вопрос ABI (Application Binary Interface), бинарной границы и бинарной совместимости в C++, раскрыт на просторах интернета не так хорошо как хотелось бы. Особенно сложно в его изучении приходится новичкам, потому что эта тема связана со множеством деталей нарочно скрытой от глаз программиста имплементации языка.
Приправив всё авторскими (и не только) мемами и юморесками за 300, я пострался привнести больше ясности об этой теме в этой статье.
https://habr.com/ru/articles/710658/
#cpp #programming
👉 @cpp_lib
Вопрос ABI (Application Binary Interface), бинарной границы и бинарной совместимости в C++, раскрыт на просторах интернета не так хорошо как хотелось бы. Особенно сложно в его изучении приходится новичкам, потому что эта тема связана со множеством деталей нарочно скрытой от глаз программиста имплементации языка.
Приправив всё авторскими (и не только) мемами и юморесками за 300, я пострался привнести больше ясности об этой теме в этой статье.
https://habr.com/ru/articles/710658/
#cpp #programming
👉 @cpp_lib
👍1
Model-View-Controller
https://www.modernescpp.com/index.php/model-view-controller
#cpp #programming
👉 @cpp_lib
https://www.modernescpp.com/index.php/model-view-controller
#cpp #programming
👉 @cpp_lib
👍2🔥1
Сборка мусора: как это делается в системном программировании
Давайте поговорим об одной из наиболее критичных по производительности программ, которой вы пользуетесь ежедневно: о вашей операционной системе. Поскольку при каждом разгоне железа вы получаете дополнительную вычислительную мощность, операционная система никогда за этим не поспевает. Поэтому постоянно доводится читать о том, как разработчики ядра и драйверов выжимают последнее из своего кода.
Кроме того, операционные системы должны быть рассчитаны на массовую конкурентность. Дело не только в том, что наша операционная система отвечает за планирование всех процессов и потоков пользовательского пространства, но и в том, что в ядре хватает собственных потоков, а также обработчиков прерываний, нужных для взаимодействия с железом. Требуется минимизировать время, которое тратится на ожидание, так как, опять же, при любой задержке вы воруете время ваших пользователей.
Rus https://habr.com/ru/companies/timeweb/articles/766772/
Eng https://bitbashing.io/gc-for-systems-programmers.html
#cpp #programming
👉 @cpp_lib
Давайте поговорим об одной из наиболее критичных по производительности программ, которой вы пользуетесь ежедневно: о вашей операционной системе. Поскольку при каждом разгоне железа вы получаете дополнительную вычислительную мощность, операционная система никогда за этим не поспевает. Поэтому постоянно доводится читать о том, как разработчики ядра и драйверов выжимают последнее из своего кода.
Кроме того, операционные системы должны быть рассчитаны на массовую конкурентность. Дело не только в том, что наша операционная система отвечает за планирование всех процессов и потоков пользовательского пространства, но и в том, что в ядре хватает собственных потоков, а также обработчиков прерываний, нужных для взаимодействия с железом. Требуется минимизировать время, которое тратится на ожидание, так как, опять же, при любой задержке вы воруете время ваших пользователей.
Rus https://habr.com/ru/companies/timeweb/articles/766772/
Eng https://bitbashing.io/gc-for-systems-programmers.html
#cpp #programming
👉 @cpp_lib
👍5❤1
Являются ли указатели функций и виртуальные функции действительно медленными?
Повсюду повторяется так много ложных истин, что иногда я считаю своим патриотическим долгом развеять всю эту дезинформацию. Не знаю, где была создана эта ложь, придумана ли она ленивыми разработчиками, которые никогда не проводили ни одного бенчмарка и хотят выглядеть хорошо перед своими коллегами, или это 20-летние бенчмарки, которые отражали аппаратное и программное окружение того времени и просто застряли в коллективном сознании.
https://lucisqr.substack.com/p/are-function-pointers-and-virtual
#cpp #programming
👉 @cpp_lib
Повсюду повторяется так много ложных истин, что иногда я считаю своим патриотическим долгом развеять всю эту дезинформацию. Не знаю, где была создана эта ложь, придумана ли она ленивыми разработчиками, которые никогда не проводили ни одного бенчмарка и хотят выглядеть хорошо перед своими коллегами, или это 20-летние бенчмарки, которые отражали аппаратное и программное окружение того времени и просто застряли в коллективном сознании.
https://lucisqr.substack.com/p/are-function-pointers-and-virtual
#cpp #programming
👉 @cpp_lib
👍7
Опыт создания UI библиотеки на C++
Началось все почти два года назад в декабрe, наш основной проект (видео мессенджер) использовал WTL для Windows и GTKmm для Linux. Поддержки мака не было. Огромной неприятностью было тащить два идентичных клиента, которые, по идее, должны делать все строго одно и тоже. Разумеется, это никогда не получалось. От мысли что надо бы сделать ещё один нативный клиент для мака начинался нервный тик...
На резонный вопрос - почему сразу делалось не на Qt могу лишь ответить, что это связано с, так скажем, гурманскими предпочтениями и, отчасти, с любовью к монолитным exe. Да и не требовалось на старте ничего кроме винды.
https://habr.com/ru/articles/768336/
#cpp #programming
👉 @cpp_lib
Началось все почти два года назад в декабрe, наш основной проект (видео мессенджер) использовал WTL для Windows и GTKmm для Linux. Поддержки мака не было. Огромной неприятностью было тащить два идентичных клиента, которые, по идее, должны делать все строго одно и тоже. Разумеется, это никогда не получалось. От мысли что надо бы сделать ещё один нативный клиент для мака начинался нервный тик...
На резонный вопрос - почему сразу делалось не на Qt могу лишь ответить, что это связано с, так скажем, гурманскими предпочтениями и, отчасти, с любовью к монолитным exe. Да и не требовалось на старте ничего кроме винды.
https://habr.com/ru/articles/768336/
#cpp #programming
👉 @cpp_lib
👍3
Как сравнить целые числа со знаком и без знака в C++20?
Сравнение двух чисел должно быть простым, верно? Может быть, и должно, но в языке C++ это не так, даже если ограничить сравнение областью целых чисел.
Если попытаться сравнить знаковое и беззнаковое целое число, то возможны несколько вариантов развития событий. Возможно, это действительно сработает, и вы никогда не узнаете, чем рисковали. Возможно, все будет не так, как вы ожидали, и вы потратите немало времени, ломая голову над тем, что же произошло. Возможно также, что он не сработает в соответствии с вашими ожиданиями, но это останется незамеченным.
https://www.sandordargo.com/blog/2023/10/11/cpp20-intcmp-utilities
#cpp #programming
👉 @cpp_lib
Сравнение двух чисел должно быть простым, верно? Может быть, и должно, но в языке C++ это не так, даже если ограничить сравнение областью целых чисел.
Если попытаться сравнить знаковое и беззнаковое целое число, то возможны несколько вариантов развития событий. Возможно, это действительно сработает, и вы никогда не узнаете, чем рисковали. Возможно, все будет не так, как вы ожидали, и вы потратите немало времени, ломая голову над тем, что же произошло. Возможно также, что он не сработает в соответствии с вашими ожиданиями, но это останется незамеченным.
https://www.sandordargo.com/blog/2023/10/11/cpp20-intcmp-utilities
#cpp #programming
👉 @cpp_lib
👍6🔥1
Инженерный калькулятор на C++. Часть 1: Токенизатор математических выражений
Всем привет! Сегодня хочу поделиться опытом написания консольного инженерного калькулятора, который может посчитать выражение вроде
Почему именно калькулятор (ну камон, их же и так тьма тьмущая)? Все потому, что в школе дали задание написать графический калькулятор на Qt; мне это показалось скучным, и я решил поэкспериментировать.
https://habr.com/ru/articles/769812/
#cpp #programming
👉 @cpp_lib
Всем привет! Сегодня хочу поделиться опытом написания консольного инженерного калькулятора, который может посчитать выражение вроде
(log2(18)/3.14)*sqrt(0.1*10^(-3)/0.02)
Почему именно калькулятор (ну камон, их же и так тьма тьмущая)? Все потому, что в школе дали задание написать графический калькулятор на Qt; мне это показалось скучным, и я решил поэкспериментировать.
https://habr.com/ru/articles/769812/
#cpp #programming
👉 @cpp_lib
👍6
Как и почему я писал для Флиппера на Си-с-классами
Мой Флиппер дошёл до меня больше полугода назад, но что-то под него написать я собрался только сейчас. Его API рассчитаны на язык С — а у меня с ним опыта не очень много. Но проблем с тулингом не возникло — у Флиппера есть своя система сборки, которая скачала мне нужный тулчейн и сгенерировала настройки для IDE.
А для написания кода я решил использовать всё же не C, а C++ — точнее, даже «Си-с-классами». На мой взгляд, затуманенный языками более высокого уровня, такой подход получился удобнее, чем писать на чистом C. Результат можно увидеть в моём репозитории, а в этой статье я попытаюсь описать, какие конкретные фичи языка я использовал, и как именно они мне помогли.
https://habr.com/ru/companies/ruvds/articles/768658/
#cpp #programming
👉 @cpp_lib
Мой Флиппер дошёл до меня больше полугода назад, но что-то под него написать я собрался только сейчас. Его API рассчитаны на язык С — а у меня с ним опыта не очень много. Но проблем с тулингом не возникло — у Флиппера есть своя система сборки, которая скачала мне нужный тулчейн и сгенерировала настройки для IDE.
А для написания кода я решил использовать всё же не C, а C++ — точнее, даже «Си-с-классами». На мой взгляд, затуманенный языками более высокого уровня, такой подход получился удобнее, чем писать на чистом C. Результат можно увидеть в моём репозитории, а в этой статье я попытаюсь описать, какие конкретные фичи языка я использовал, и как именно они мне помогли.
https://habr.com/ru/companies/ruvds/articles/768658/
#cpp #programming
👉 @cpp_lib
👍2🤮1
Интервью с разработчиками мультитула для хакеров и пентестеров Flipper Zero
Flipper Zero — карманный "мультитул" для гиков, сокровище для пентестеров, ваш собственный кибер-зверёк. Возможности девайса ограничиваются только вашим воображением и сноровкой.
В этой статье мы пообщаемся с разработчиками устройства Flipper Zero. Поклонникам девайса предлагается нырнуть вглубь истории создания и технических возможностей. Тем, кто впервые слышит про Флиппер — познакомиться с проектом. Флиппер переживал и запреты, и негатив, и обожание. Проект собрал вокруг себя сотни тысяч энтузиастов-хакеров, людей, охваченных любопытством познания мира вокруг. Приятного чтения!
Мы пообщались с тремя разработчиками — Александром, Иваном и Сергеем. Заряженная энергией и позитивом команда собралась перед нами, чтобы поделиться сокровенным, одним из главных дел их жизни — проектом Flipper Zero.
https://habr.com/ru/companies/pvs-studio/articles/769634/
#cpp #programming
👉 @cpp_lib
Flipper Zero — карманный "мультитул" для гиков, сокровище для пентестеров, ваш собственный кибер-зверёк. Возможности девайса ограничиваются только вашим воображением и сноровкой.
В этой статье мы пообщаемся с разработчиками устройства Flipper Zero. Поклонникам девайса предлагается нырнуть вглубь истории создания и технических возможностей. Тем, кто впервые слышит про Флиппер — познакомиться с проектом. Флиппер переживал и запреты, и негатив, и обожание. Проект собрал вокруг себя сотни тысяч энтузиастов-хакеров, людей, охваченных любопытством познания мира вокруг. Приятного чтения!
Мы пообщались с тремя разработчиками — Александром, Иваном и Сергеем. Заряженная энергией и позитивом команда собралась перед нами, чтобы поделиться сокровенным, одним из главных дел их жизни — проектом Flipper Zero.
https://habr.com/ru/companies/pvs-studio/articles/769634/
#cpp #programming
👉 @cpp_lib
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
С++
01 Введение
02 Placement new
03 Наивная реализация конструкторов и функции Reserve
04 Обработка исключений
05 Уносим сырую память в класс обёртку
06 Функции std::uninitialized *
07 Оператор присваивания и move конструктор
08 Resize, PushBack и PopBack
09 Гарантии безопасности исключений
10 Variadic templates
#cpp #programming
👉 @cpp_lib
01 Введение
02 Placement new
03 Наивная реализация конструкторов и функции Reserve
04 Обработка исключений
05 Уносим сырую память в класс обёртку
06 Функции std::uninitialized *
07 Оператор присваивания и move конструктор
08 Resize, PushBack и PopBack
09 Гарантии безопасности исключений
10 Variadic templates
#cpp #programming
👉 @cpp_lib
👍3❤1