🚫 Антипаттерн недели: Применение new и delete вместо умных указателей
В C++ ручное управление памятью с помощью new и delete может вызвать утечки памяти, неопределённое поведение и ошибки двойного освобождения.
✔️ Используйте std::unique_ptr или std::shared_ptr, которые автоматически освобождают ресурсы при выходе из области видимости.
👩💻
@quizcpp
В C++ ручное управление памятью с помощью new и delete может вызвать утечки памяти, неопределённое поведение и ошибки двойного освобождения.
✔️ Используйте std::unique_ptr или std::shared_ptr, которые автоматически освобождают ресурсы при выходе из области видимости.
👩💻
@quizcpp
⚙️ std::condition_variable
Класс std::condition_variable в C++ предлагает способ синхронизации потоков, позволяя одному потоку ожидать уведомления от другого потока о произошедшем событии. Это важно для координации работы нескольких потоков в многопоточных приложениях.
👩💻
@quizcpp
Класс std::condition_variable в C++ предлагает способ синхронизации потоков, позволяя одному потоку ожидать уведомления от другого потока о произошедшем событии. Это важно для координации работы нескольких потоков в многопоточных приложениях.
👩💻
@quizcpp
⚙️ std::identity
std::identity (C++20) — это функциональный объект, который возвращает аргумент, который ему передан, без каких-либо изменений. Он полезен для адаптации алгоритмов.
👩💻
@quizcpp
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
Как функционирует 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::from_chars (C++17) предоставляет возможность быстро преобразовать строку в число без ненужных аллокаций и проверок на исключения, что делает его более быстрым, чем std::stoi.
👩💻
@quizcpp
⚙️ std::bind_front
std::bind_front (C++20) позволяет предварительно привязывать первые аргументы функции или функторов, что упрощает их последующие вызовы.
👩💻
@quizcpp
std::bind_front (C++20) позволяет предварительно привязывать первые аргументы функции или функторов, что упрощает их последующие вызовы.
👩💻
@quizcpp
⚙️ std::countr_zero
std::countr_zero (C++20) подсчитывает, сколько нулевых битов находится в конце двоичного представления числа. Это полезно для выполнения битовых операций и оптимизаций.
👩💻
@quizcpp
std::countr_zero (C++20) подсчитывает, сколько нулевых битов находится в конце двоичного представления числа. Это полезно для выполнения битовых операций и оптимизаций.
👩💻
@quizcpp
⚙️ std::byteswap (C++23) изменяет порядок байтов в числе, что удобно для работы с системами big-endian и little-endian. 👩💻
@quizcpp
@quizcpp
⚙️ std::endian
std::endian (C++20) указывает на порядок байтов (big-endian или little-endian) в текущей системе. Это важно при взаимодействии с бинарными файлами и сетевыми протоколами.
👩💻
@quizcpp
std::endian (C++20) указывает на порядок байтов (big-endian или little-endian) в текущей системе. Это важно при взаимодействии с бинарными файлами и сетевыми протоколами.
👩💻
@quizcpp
⚙️ std::scope_guard
std::scope_guard (C++23) автоматически осуществляет заданное действие при выходе из области видимости, что способствует управлению ресурсами и предотвращает утечки.
👩💻
@quizcpp
std::scope_guard (C++23) автоматически осуществляет заданное действие при выходе из области видимости, что способствует управлению ресурсами и предотвращает утечки.
👩💻
@quizcpp
⚙️ std::atomic_flag
std::atomic_flag — это базовый атомарный флаг, предназначенный для низкоуровневой синхронизации потоков без использования блокировок. Он полезен для создания спинлоков.
👩💻
@quizcpp
std::atomic_flag — это базовый атомарный флаг, предназначенный для низкоуровневой синхронизации потоков без использования блокировок. Он полезен для создания спинлоков.
👩💻
@quizcpp
⚙️ std::hive
std::hive (C++23) — это контейнер, который оптимизирован для частых добавлений и удалений элементов, при этом предотвращая фрагментацию памяти. В отличие от std::vector или std::list, hive предлагает эффективное управление памятью и итерацию.
👩💻
@quizcpp
std::hive (C++23) — это контейнер, который оптимизирован для частых добавлений и удалений элементов, при этом предотвращая фрагментацию памяти. В отличие от std::vector или std::list, hive предлагает эффективное управление памятью и итерацию.
👩💻
@quizcpp
⚙️ fmt::print()
fmt::print() из библиотеки {fmt} — это современный способ форматирования и вывода текста, который является альтернативой printf() и std::cout. Он предлагает удобные возможности для форматирования, безопасный подход и высокую производительность.
🔗 Документация (https://fmt.dev/)
👩💻
@quizcpp
fmt::print() из библиотеки {fmt} — это современный способ форматирования и вывода текста, который является альтернативой printf() и std::cout. Он предлагает удобные возможности для форматирования, безопасный подход и высокую производительность.
🔗 Документация (https://fmt.dev/)
👩💻
@quizcpp
🚫 Антипаттерн недели: Использование ручного управления памятью вместо std::unique_ptr
В C++ применение new и delete без должного контроля может вызвать утечки памяти, ошибки двойного освобождения и неопределённое поведение.
✔️ Используйте std::unique_ptr для автоматического освобождения памяти.
👩💻
@quizcpp
В C++ применение new и delete без должного контроля может вызвать утечки памяти, ошибки двойного освобождения и неопределённое поведение.
✔️ Используйте std::unique_ptr для автоматического освобождения памяти.
👩💻
@quizcpp