Daily bit(e) C++. Опциональные значения: std::unique_ptr, std::optional
Добавлено 11 сентября 2026 в 04:46
Daily bit(e) C++ 101: представление опциональных (необязательных) значений с помощью std::unique_ptr и std::optional.

Для представления необязательного (опционального) значения можно использовать std::unique_ptr (C++11) и выделение памяти в куче (где nullptr означает отсутствие значения). Однако это влечет за собой дополнительные затраты во время выполнения и сопряжено с риском сбоя (и выбрасивания исключения).
std::optional (C++17) не требует выделения динамической памяти, а дополнительные затраты ограничиваются лишь хранением логического флага (bool).
#include <memory>
#include <optional>
struct Data{};
std::unique_ptr<Data> dynamic_return() {
return std::make_unique<Data>();
}
std::optional<Data> no_allocation() {
return std::make_optional<Data>();
}
auto x = dynamic_return();
if (x != nullptr) // или просто if(x)
{
// обработка данных
}
auto y = no_allocation();
if (y.has_value()) // или просто if(y)
{
// обработка данных
}
