这个unique_ptr的初始化有什么问题?

Ger*_*dos 6 c++ initialization unique-ptr c++11

有人可以告诉我,unique_ptr的以下初始化有什么问题?

int main()
{
  unique_ptr<int> py(nullptr);
  py = new int;
  ....
}
Run Code Online (Sandbox Code Playgroud)

g ++ -O2 xxx.cc -lm -o xxx -std = c ++ 11说:

error: no match for ‘operator=’ (operand types are    ‘std::unique_ptr<int>’ and ‘int*’)
   py = new int;
      ^
Run Code Online (Sandbox Code Playgroud)

unique_ptr<int> px(new int);
Run Code Online (Sandbox Code Playgroud)

工作得很好.

Kil*_*nDS 9

初始化在两段代码中都很好,unique_ptr有两个构造函数nullptr和裸指针.

第一个片段中失败的是赋值,这是因为unique_ptr没有一个operator=接受裸指针作为其右侧的重载.它确实接受了另一个unique_ptr,所以你可以这样做:

py = unique_ptr<int>{new int};
py = std::make_unique<int>(); // Since c++14
Run Code Online (Sandbox Code Playgroud)

或者你可以看一下,reset它也接受一个裸指针,并且或多或少具有相同的含义:

py.reset(new int);
Run Code Online (Sandbox Code Playgroud)


Che*_*Alf 7

关于

" unique_ptr的以下初始化有什么问题?

这不是初始化有问题,而是以下任务.

这就是错误消息中的插入符号(向上箭头)指向的位置:在赋值时.强提示:使用reset成员函数或创建unique_ptr实例.


关于

unique_ptr<int> px(new int);
Run Code Online (Sandbox Code Playgroud)

工作正常.

它是指向a的原始指针的赋值,unique_ptr这是有问题的,而不是初始化.