unique_ptr的初始化有什么问题?

What's wrong with this initialization of unique_ptr?

本文关键字:什么 问题 初始化 ptr unique      更新时间:2023-10-16

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

int main()
{
  unique_ptr<int> py(nullptr);
  py = new int;
  ....
}

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;
      ^

进行

unique_ptr<int> px(new int);

效果很好。

这两段代码的初始化都很好,unique_ptrnullptr和裸指针都有构造函数。

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

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

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

py.reset(new int);

关于

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

有问题的不是初始化,而是下面的赋值。

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


关于

进行

unique_ptr<int> px(new int);

效果很好。

有问题的是对unique_ptr的原始指针的赋值,而不是初始化。