有人可以告诉我,下面的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);
工作正常。
答案 0 :(得分:9)
初始化在两段代码中都很好,unique_ptr
对nullptr
和裸指针都有constructors。
第一个片段中失败的是分配,这是因为unique_ptr
没有operator=
重载,它接受裸指针作为其右侧。它确实接受了另一个unique_ptr
,所以你可以这样做:
py = unique_ptr<int>{new int};
py = std::make_unique<int>(); // Since c++14
或者你可以看一下reset
,它也接受一个裸指针并且或多或少有相同的含义:
py.reset(new int);
答案 1 :(得分:7)
关于
“以下初始化unique_ptr有什么问题?
初始化不是有问题的,而是以下任务。
错误消息中的插入符号(向上箭头)指向的位置:在分配处。强提示:使用reset
成员函数,或创建unique_ptr
实例。
关于
操作
unique_ptr<int> px(new int);
工作正常。
指向unique_ptr
的原始指针的分配是有问题的,而不是初始化。