unique_ptr的初始化有什么问题?
What's wrong with this initialization of unique_ptr?
有人能告诉我,以下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_ptr
为nullptr
和裸指针都有构造函数。
第一个代码段中失败的是赋值,这是因为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
的原始指针的赋值,而不是初始化。
相关文章:
- 警告处理为错误这里有什么问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题
- 违反const正确性:我应该现实地期待什么问题
- 这个带有模板<类 Vector 的C++代码片段有什么问题>
- 我的逻辑反转字符串中的元音有什么问题?
- 需要以下代码的帮助,下面的代码有什么问题
- 常量公共成员有什么问题?
- 以下代码中的函数模板有什么问题?
- 这个返回元素位置的基于循环的函数有什么问题?
- creat_list2功能有什么问题?
- 格式说明符C++有什么问题
- 任何人都可以告诉我我的 C++ 代码出了什么问题?
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 我的堆栈和库存清单程序的结构有什么问题?
- 此工厂功能有什么问题?
- 以下 C++ 代码有什么问题?
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- reinterpret_cast,只读访问,简单的可复制类型,会出什么问题?
- 它解决了什么问题,对于非真空初始化,生命周期在初始化之前就开始了