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)
工作得很好.
初始化在两段代码中都很好,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)
关于
" unique_ptr的以下初始化有什么问题?
这不是初始化有问题,而是以下任务.
这就是错误消息中的插入符号(向上箭头)指向的位置:在赋值时.强提示:使用reset成员函数或创建unique_ptr实例.
关于
干
Run Code Online (Sandbox Code Playgroud)unique_ptr<int> px(new int);工作正常.
它是指向a的原始指针的赋值,unique_ptr这是有问题的,而不是初始化.
| 归档时间: |
|
| 查看次数: |
2220 次 |
| 最近记录: |