C ++ unique_ptr到数组元素

时间:2017-09-23 21:27:53

标签: c++ arrays unique-ptr

我有一个函数将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):

1 个答案:

答案 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]副本)。