Подтвердить что ты не робот

С++ - Возврат const unique_ptr

Мне интересно, почему я получаю сообщение об ошибке при компиляции:

const std::unique_ptr<int> get() { 
    return std::make_unique<int>(10);
}

int main() { 

    const std::unique_ptr<int> value = get();

    return EXIT_SUCCESS;
}

Я получаю следующую ошибку:

main.cpp: In function ‘int main()’:
main.cpp:10:44: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_delete<int>]’
     const std::unique_ptr<int> value = get();

Он правильно компилируется, когда я удаляю const из подписи get.

Есть ли способ вернуть константу unique_ptr?

4b9b3361

Ответ 1

Поскольку константа unique_ptr постоянна, ее нельзя переместить только скопировать. И копирование unique_ptr не разрешено (иначе оно не было бы "уникальным" ).

Если данные, на которые указывает указатель, должны быть постоянными, используйте вместо этого std::unique_ptr<const int>.