Telegram Web
🚫 Антипаттерн недели: Применение new и delete вместо умных указателей

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

✔️ Используйте std::unique_ptr или std::shared_ptr, которые автоматически освобождают ресурсы при выходе из области видимости.

👩‍💻
@quizcpp
⚙️ std::condition_variable

Класс std::condition_variable в C++ предлагает способ синхронизации потоков, позволяя одному потоку ожидать уведомления от другого потока о произошедшем событии. Это важно для координации работы нескольких потоков в многопоточных приложениях.

👩‍💻
@quizcpp
⚙️ std::identity

std::identity (C++20) — это функциональный объект, который возвращает аргумент, который ему передан, без каких-либо изменений. Он полезен для адаптации алгоритмов.

👩‍💻
@quizcpp
Вопрос на собеседовании

Как функционирует expression SFINAE в C++, и чем оно отличается от обычного SFINAE?

Ответ ⬇️
SFINAE (Substitution Failure Is Not An Error) позволяет компилятору игнорировать неподходящие шаблонные перегрузки, не выдавая ошибок. Expression SFINAE — это метод, при котором проверяется не только наличие типа, но и возможность использования выражения с этим типом.

Обычный SFINAE работает с typename, тогда как expression SFINAE применяется в decltype() для проверки существования определенных операций или методов в типе.

Пример использования ⚙️
#include
#include

// Проверяем, есть ли у типа метод size()
template
auto has_size(int) -> decltype(std::declval().size(), std::true_type{}) {
return {};
}

template
std::false_type has_size(...) { return {}; }

int main() {
std::cout
@quizcpp
⚙️ std::from_chars

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

👩‍💻
@quizcpp
⚙️ std::bind_front

std::bind_front (C++20) позволяет предварительно привязывать первые аргументы функции или функторов, что упрощает их последующие вызовы.

👩‍💻
@quizcpp
⚙️ std::countr_zero

std::countr_zero (C++20) подсчитывает, сколько нулевых битов находится в конце двоичного представления числа. Это полезно для выполнения битовых операций и оптимизаций.

👩‍💻
@quizcpp
⚙️ std::byteswap (C++23) изменяет порядок байтов в числе, что удобно для работы с системами big-endian и little-endian. 👩‍💻
@quizcpp
⚙️ std::endian

std::endian (C++20) указывает на порядок байтов (big-endian или little-endian) в текущей системе. Это важно при взаимодействии с бинарными файлами и сетевыми протоколами.

👩‍💻
@quizcpp
⚙️ std::scope_guard

std::scope_guard (C++23) автоматически осуществляет заданное действие при выходе из области видимости, что способствует управлению ресурсами и предотвращает утечки.

👩‍💻
@quizcpp
⚙️ std::atomic_flag

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

👩‍💻
@quizcpp
⚙️ std::hive

std::hive (C++23) — это контейнер, который оптимизирован для частых добавлений и удалений элементов, при этом предотвращая фрагментацию памяти. В отличие от std::vector или std::list, hive предлагает эффективное управление памятью и итерацию.

👩‍💻
@quizcpp
⚙️ fmt::print()

fmt::print() из библиотеки {fmt} — это современный способ форматирования и вывода текста, который является альтернативой printf() и std::cout. Он предлагает удобные возможности для форматирования, безопасный подход и высокую производительность.

🔗 Документация (https://fmt.dev/)

👩‍💻
@quizcpp
🚫 Антипаттерн недели: Использование ручного управления памятью вместо std::unique_ptr

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

✔️ Используйте std::unique_ptr для автоматического освобождения памяти.

👩‍💻
@quizcpp
2025/06/27 11:24:05
Back to Top
HTML Embed Code: