C++ - 返回const unique_ptr

jea*_*553 25 c++ c++11

我想知道为什么我在编译时遇到错误:

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

int main() { 

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

    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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();
Run Code Online (Sandbox Code Playgroud)

当我constget签名中删除它时,它正确编译.

有没有办法返回一个常量unique_ptr?

Som*_*ude 53

因为它unique_ptr是常量,所以不能仅移动复制.并且unique_ptr不允许复制a (否则它将不是"唯一的").

如果指针指向的数据应该是常量,那么请std::unique_ptr<const int>改用.

  • 快速说明一下:由于保证了复制省略,OP的例子必须在C++ 17中编译. (2认同)