在唯一指针 C++ 中初始化 int 时出错

问题描述 投票:0回答:1

如果我按如下方式初始化唯一指针,则会收到错误:

std::unique_ptr<int> ptr_obj=new int{10};

错误:请求从‘int*’转换为非标量类型‘std::unique_ptr’

这段代码运行良好:

std::unique_ptr<int> ptr_obj{new int{10}};

这两种初始化方式有什么区别?使用

{}
=
应该没有什么区别,因为两者都只是显式转换为
int

c++ initialization unique-ptr
1个回答
0
投票

要处理等号,您必须使用 std::make_unique:

 std::unique_ptr<int> ptr_obj = std::make_unique<int>(10);

并像普通指针一样使用它:

 *ptr_obj; // return 10

您第一次尝试使用等号不起作用,因为在左侧您有一个 std::unique_ptr 类型,而在右侧您有一个 int 类型的原始指针

© www.soinside.com 2019 - 2024. All rights reserved.