C++ unique_ptr 到数组元素
C++ unique_ptr to array element
我有一个函数 returns 一个 unique_ptr 到一个数组元素,我注意到原始变量没有得到更新。
为什么这样做(a[5] == 6 之后):
int a[10];
for (size_t i = 0; i < 10; i++)
{
a[i] = i;
}
int* ap = &a[5];
*ap += 1;
但是
int a[10];
for (size_t i = 0; i < 10; i++)
{
a[i] = i;
}
unique_ptr<int> ap = make_unique<int>(a[5]);
*ap += 1;
不更新原数组元素? (a[5] == 5 ):
函数std::make_unique<T>
构造一个新对象。
引用:
Constructs an object of type T and wraps it in a std::unique_ptr.
因此,您的声明
unique_ptr<int> ap = make_unique<int>(a[5]);
创建 另一个 整数 (T = int
) 并使用表达式 a[5]
.
的值对其进行初始化
因此,当您对指针 ap
进行操作时,您实际上是在修改另一个整数(a[5]
的 copy)。
我有一个函数 returns 一个 unique_ptr 到一个数组元素,我注意到原始变量没有得到更新。
为什么这样做(a[5] == 6 之后):
int a[10];
for (size_t i = 0; i < 10; i++)
{
a[i] = i;
}
int* ap = &a[5];
*ap += 1;
但是
int a[10];
for (size_t i = 0; i < 10; i++)
{
a[i] = i;
}
unique_ptr<int> ap = make_unique<int>(a[5]);
*ap += 1;
不更新原数组元素? (a[5] == 5 ):
函数std::make_unique<T>
构造一个新对象。
引用:
Constructs an object of type T and wraps it in a std::unique_ptr.
因此,您的声明
unique_ptr<int> ap = make_unique<int>(a[5]);
创建 另一个 整数 (T = int
) 并使用表达式 a[5]
.
因此,当您对指针 ap
进行操作时,您实际上是在修改另一个整数(a[5]
的 copy)。