Daily bit(e) C++. Опциональные значения: std::unique_ptr, std::optional

Добавлено 11 сентября 2026 в 04:46

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

Daily bit(e) C++

Для представления необязательного (опционального) значения можно использовать 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)
{
    // обработка данных
}

Пример на Compiler Explorer

Теги

C++ / CppDaily bit(e) C++Программирование