2017-09-23 152 views
-3

我有一個函數返回一個unique_ptr到數組元素,我注意到原始變量沒有得到更新。C++ unique_ptr數組元素

爲什麼這項工作(一[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):

+2

請閱讀[make_unique](http://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique)的內容。它不會創建一個指向現有元素的指針,它會創建一個指向新元素的指針,並使用您傳入的任何元素進行初始化。 – nwp

回答

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])。

+0

啊,當然,謝謝。猜猜我不需要unique_ptr,因爲我不必刪除那個指針。 – Kuchinawa