我有一个函数将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):
答案 0 :(得分:5)
函数std::make_unique<T>
构造一个新对象。
引用:
构造 T类型的对象并将其包装在std :: unique_ptr中。
因此,您的陈述
unique_ptr<int> ap = make_unique<int>(a[5]);
创建另一个整数(T = int
)并使用表达式a[5]
的值对其进行初始化。
因此,当您使用指针ap
进行操作时,实际上是在修改另一个整数(a[5]
的副本)。