C++:如何使 std::unique_ptr<int> 指向一个新整数?
C++: how to make std::unique_ptr<int> point to a new integer?
我有以下代码:
int my_function(int x) {
return x+1;
}
void find_my_next_idx(std::unique_ptr<int> my_idx_ptr) {
// do something here
// update my_idx_ptr
}
std::unique_ptr<int> my_idx_ptr = std::make_unique<int>(my_function(5));
if (!my_flag) {
int a = 4;
my_idx_ptr.reset(std::move(&a));
}
find_my_next_idx(my_idx_ptr); // --> error line
然后我收到以下错误:
error: call to implicitly-deleted copy constructor of 'std::unique_ptr<int>'
我做错了什么?我如何使my_idx_ptr
指向不同的整数值?谢谢!
如果您希望unique_ptr
包含值 4,您只需执行以下操作:
my_idx_ptr = std::make_unique(4);
执行此操作时,您不必担心前一个对象会发生什么情况,因为它会破坏前一个对象并取得新对象的所有权。
由于无法复制unique_ptr
(这是调用find_my_next_idx
时出错的原因),因此您可以:
- 通过引用传递
unique_ptr
- 在函数调用中使用
std::move
。
第一个选项要求您将函数原型更改为:
void find_my_next_idx(std::unique_ptr<int>& my_idx_ptr);
第二个选项需要您像这样调用:
find_my_next_idx(std::move(my_idx_ptr));
std::unique_ptr 在内部存储一个指针,因此它将其数据存储在堆上的 new 上。您正在尝试从堆栈上的局部变量中移动指针,这是错误的,因为局部变量在 vlose } 处被销毁。
尝试简单地使用 my_idx_ptr = std::make_unique(5);
通常,您很少使用 std:: move,因为编译器会根据变量是左值还是右值来选择正确的函数。
unique_ptr
无法复制,但您可以移动它:
std::unique_ptr<int> my_idx_ptr = std::make_unique<int>(my_function(5));
if (!my_flag) {
int a = 4;
my_idx_ptr.reset(std::move(&a));
}
find_my_next_idx( std::move(my_idx_ptr) );
您不应该将指向局部变量的指针传递给unique_ptr
,因为unique_ptr
通过运算符删除拥有的对象delete
托管对象,托管对象应该像a
变量一样分配给堆而不是堆栈。
my_idx_ptr.reset(new int(a)); // create new int onto heap
相关文章:
- C++需要帮助从用户那里获得一个整数,并确保它在另外两个整数之间
- 当我们从/tp地址中添加/减去一个整数时会发生什么
- 如何将一个数组值合并为一个整数c++
- 为什么有时我输入一个整数,程序将第一个输入的数字打印成十进制数?
- 给定一个整数数组,需要在Max_Heap上运行操作。得到错误"segmentation fault",有什么想法吗?(C++)
- 我可以将迭代器递增一个整数吗?
- 有没有办法生成一个包含平方的序列,这些平方加起来就是一个整数平方?
- 为什么将两个浮点数相加会得到一个整数C++?
- 如果我们在其中输入一个整数,则字符会给出整数作为输出,但是当分配给它一个整数时,这不会发生。为什么?
- 给枚举一个整数,并在 C++ 中将其相关值作为字符串获取
- 按升序输出整数时,将最后一个整数放在新行上
- 编写一个程序,提示用户输入一个整数,然后输出数字的单个数字和数字的总和
- 给定一个整数 N>0,区间 [0, 2^N) 中有多少个整数正好有 N-1 个设置位?编写一个返回正确答案的简短函数
- 给定一个整数,将其表示为平方和
- c++interpret_cast是一个整数
- 以最少的步骤将给定整数转换为另一个整数
- 当 map 是一个整数数组并且由 operator[] 创建时,它是否初始化其映射类型
- 我需要将字符串(例如 A5)转换为一个字符串 (A) 和一个整数 (5)
- 如何交替从文件中获取一行数据和一个整数?
- 如何让这个C++代码从用户那里读取五个整数而不是一个整数?