Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26🤝16👍5❤2😁2
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤12👍6
В этой статье:
• Понять, зачем нужны умные указатели и автоматическое управление памятью• Разобраться в различиях unique_ptr, shared_ptr и weak_ptr на примерах• Научиться выбирать подходящий умный указатель и избегать типичных ошибок🔊 Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍9❤4
Как перестать писать begin()/end() вручную?
Классический цикл выглядит так:
Здесь много «технического шума»: итераторы,
Range-based for делает то же самое короче и понятнее:
А если нужно менять элементы, можно сразу работать по ссылке:
🔥 Итог: используй range-based for вместо явных
📣 C++ Ready | #совет
Классический цикл выглядит так:
for (auto it = scores.begin(); it != scores.end(); ++it) {
std::cout << *it << '\n';
}Здесь много «технического шума»: итераторы,
begin()/end(), разыменование *it.Range-based for делает то же самое короче и понятнее:
for (int score : scores) {
std::cout << score << '\n';
}А если нужно менять элементы, можно сразу работать по ссылке:
for (int& score : scores) {
score += 10;
}begin()/end() — меньше шума, меньше поводов ошибиться, код читается как «пройти по всем элементам контейнера».Please open Telegram to view this post
VIEW IN TELEGRAM
🤝15👍10❤4👎2😁2
This media is not supported in your browser
VIEW IN TELEGRAM
Блог Артура О’Дуайера, тренера и участника комитета стандартизации C++, с глубокими разборками современного C++: STL, предложения в стандарт, «тёмные уголки» языка, производительность и нетривиальные баги из реального кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤5👍3
Небольшая программа превращает обычный текстовый словарик в живую тренировку памяти: вопросы появляются случайно, а каждый ответ тут же показывает, насколько ты внимателен.
В этой задаче узнаешь:
• Как превращать список слов в живые вопросы;
• Почему короткие сессии повторения укрепляют память лучше зубрёжки;
• Что меняется, когда ответы сразу показывают твой прогресс.
Пара строк текста в файле — и у тебя есть личный учитель, который терпеливо задаёт вопросы хоть каждый день.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥9❤5👎1🤝1
Например, DNS-сервер преобразует доменное имя в IP-адрес, а кеш-сервер ускоряет отдачу данных, снижая нагрузку на базу.
На картинке — фундамент серверной инфраструктуры, без которой не работает ни одно современное приложение.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥8❤4
Заменить значение и забрать старое — std::exchange!
Иногда нужно “переключить” переменную на новое значение и при этом сохранить старое: например, сбросить флаг, обнулить указатель, забрать ресурс у объекта. Вместо двух строк и временной переменной есть удобная функция
Сначала типичный “ручной” вариант:
Теперь то же самое одной строкой:
Частый практический кейс — “забрать” указатель и обнулить его, чтобы избежать повторного использования:
И ещё один популярный пример — move-конструктор, где нужно забрать ресурс и оставить исходный объект в безопасном состоянии:
🔥
📣 C++ Ready | #практика
Иногда нужно “переключить” переменную на новое значение и при этом сохранить старое: например, сбросить флаг, обнулить указатель, забрать ресурс у объекта. Вместо двух строк и временной переменной есть удобная функция
std::exchange.Сначала типичный “ручной” вариант:
int old = value;
value = 0;
use(old);
Теперь то же самое одной строкой:
std::exchange возвращает старое значение и записывает новое:int old = std::exchange(value, 0);
use(old);
Частый практический кейс — “забрать” указатель и обнулить его, чтобы избежать повторного использования:
T* take_ptr(T*& p) {
return std::exchange(p, nullptr);
}И ещё один популярный пример — move-конструктор, где нужно забрать ресурс и оставить исходный объект в безопасном состоянии:
struct Buffer {
int* data = nullptr;
Buffer(Buffer&& other) noexcept
: data(std::exchange(other.data, nullptr)) {}
};std::exchange делает намерение явным: “забрать старое, поставить новое” — меньше кода, меньше шансов забыть сбросить состояние.Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥11❤6
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝32🔥18❤5👍1
В этой статье:
• Понять, как RAII помогает строить архитектуру и инварианты• Увидеть примеры управления разными ресурсами (не только памятью)• Научиться делать код устойчивым к исключениям и “утечкам ответственности”🔊 Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍6❤5😁1