如果我按如下方式初始化唯一指针,则会收到错误:
std::unique_ptr<int> ptr_obj=new int{10};
错误:请求从‘int*’转换为非标量类型‘std::unique_ptr’
这段代码运行良好:
std::unique_ptr<int> ptr_obj{new int{10}};
这两种初始化方式有什么区别?使用
{}
和 =
应该没有什么区别,因为两者都只是显式转换为 int
。
要处理等号,您必须使用 std::make_unique:
std::unique_ptr<int> ptr_obj = std::make_unique<int>(10);
并像普通指针一样使用它:
*ptr_obj; // return 10
您第一次尝试使用等号不起作用,因为在左侧您有一个 std::unique_ptr 类型,而在右侧您有一个 int 类型的原始指针。