Он берет ресурс «в единоличное владение» и автоматически освобождает его при выходе из области видимости. Код чище, намерения понятнее — никаких manual delete.
Что важно знать:
• RAII-подход: объект уничтожается автоматически, даже при исключениях
• Указатель нельзя копировать, но можно перемещать → один владелец, один delete
• std::make_unique — безопасный способ создания: защищает от утечек при new
unique_ptr прост, компактен и отлично сочетается с современным стилем C++.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15🔥12🤝11👍6😁1
This media is not supported in your browser
VIEW IN TELEGRAM
База реальных собеседований от Т-Банк, Яндекса, Сбера и 100+ топовых компаний. 10 000+ вопросов по Frontend, Backend, DevOps и другим направлениям. Удобный тренажёр, персональная статистика и еженедельные обновления.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍5🔥5🤝2
Быстро тестируем код через assert.
Сейчас научимся добавлять простые проверки прямо в код, чтобы убедиться, что функции работают правильно. Это особенно удобно на этапе отладки и для мини-тестов без фреймворков.
Подключим нужную библиотеку:
Предположим, у нас есть функция, которая должна возвращать квадрат числа. Реализуем её так:
Теперь напишем несколько простых тестов с помощью assert, чтобы проверить, что функция работает правильно на базовых примерах:
Если проверка не пройдёт — программа остановится и покажет, где ошибка.
Вот как может выглядеть ошибка, если ожидание не совпадает с результатом:
🔥 Таким образом ты можешь быстро проверять поведение функций — без сторонних библиотек и с минимальным кодом.
📣 C++ Ready | #практика
Сейчас научимся добавлять простые проверки прямо в код, чтобы убедиться, что функции работают правильно. Это особенно удобно на этапе отладки и для мини-тестов без фреймворков.
Подключим нужную библиотеку:
#include <cassert>
#include <iostream>
Предположим, у нас есть функция, которая должна возвращать квадрат числа. Реализуем её так:
int square(int x) {
return x * x;
}
Теперь напишем несколько простых тестов с помощью assert, чтобы проверить, что функция работает правильно на базовых примерах:
int main() {
assert(square(2) == 4);
assert(square(-3) == 9);
assert(square(0) == 0);
std::cout << "Все тесты пройдены!\n";
return 0;
}
Если проверка не пройдёт — программа остановится и покажет, где ошибка.
Вот как может выглядеть ошибка, если ожидание не совпадает с результатом:
Assertion failed: square(2) == 5, file main.cpp, line 10
🔥 Таким образом ты можешь быстро проверять поведение функций — без сторонних библиотек и с минимальным кодом.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤25👍9🔥8🤝1
❤15👍9🔥6🤝1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥9❤5🤝3
This media is not supported in your browser
VIEW IN TELEGRAM
Здесь вы найдёте статьи о новых возможностях языка, практических приёмах, обзорах стандартов и техниках оптимизации. Автор делится личным опытом, разбирает реальные задачи, даёт советы по написанию эффективного и понятного кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍5🔥5
Разберёмся, как получить суммарный объём всех файлов в папке, применив стандартную библиотеку <filesystem>. Пользователь вводит путь в консоль — быстро и ясно!
Ключевые моменты:
• При каждом посещении обычного файла добавляем его размер к общему счётчику (entry.file_size()).
• Путь к каталогу спрашиваем у пользователя, валидируем и передаём функции.
• Возможные исключения ловим, чтобы программа не падала на недоступных файлах.
Приём пригодится и тем, кто уже работал с <filesystem>, и тем, кто только открывает для себя его удобные API.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16🤝13❤4
Безопасно получаем элемент из vector!
Сейчас научимся обращаться к элементу вектора так, чтобы не получить ошибку выхода за границы — без исключений и без падений.
Сначала подключим нужные библиотеки для работы с консолью и стандартным вектором:
Затем создадим простой вектор с несколькими целыми числами, которые будут выступать в роли исходных данных:
Теперь предположим, что у нас есть индекс, по которому мы хотим получить элемент вектора. Он может быть как корректным, так и ошибочным:
Перед тем как обратиться к элементу по индексу, обязательно проверим, не выходит ли он за допустимые границы вектора. Это защитит программу от ошибки доступа к памяти:
Возможный результат при запуске (если индекс выходит за пределы размера вектора):
🔥 Так ты можешь безопасно обращаться к элементам вектора — без риска краха программы и без try-catch, которые могут быть избыточными в простых случаях.
📣 C++ Ready | #практика
Сейчас научимся обращаться к элементу вектора так, чтобы не получить ошибку выхода за границы — без исключений и без падений.
Сначала подключим нужные библиотеки для работы с консолью и стандартным вектором:
#include <iostream>
#include <vector>
Затем создадим простой вектор с несколькими целыми числами, которые будут выступать в роли исходных данных:
std::vector<int> data = {10, 20, 30};
Теперь предположим, что у нас есть индекс, по которому мы хотим получить элемент вектора. Он может быть как корректным, так и ошибочным:
size_t index = 5;
Перед тем как обратиться к элементу по индексу, обязательно проверим, не выходит ли он за допустимые границы вектора. Это защитит программу от ошибки доступа к памяти:
if (index < data.size()) {
std::cout << "Элемент: " << data[index] << '\n';
} else {
std::cout << "Ошибка: индекс вне диапазона\n";
}
Возможный результат при запуске (если индекс выходит за пределы размера вектора):
Ошибка: индекс вне диапазона
🔥 Так ты можешь безопасно обращаться к элементам вектора — без риска краха программы и без try-catch, которые могут быть избыточными в простых случаях.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍10🔥5👎1🤝1