2017-02-20 74 views
0

我是否需要以任何方式管理这个数组,或者unique_ptr会照顾它?我已经读过,如果arry被赋予一个新的值,那么它将不再被管理。我对这个新手很不理解。我是否需要手动删除或管理这个unique_ptr

int main() { 

    int i = 0; 
    int maxSpaceSize = 10;  
    unique_ptr<int[]> arry (new int[maxSpaceSize]()); 

    for (i = 0; i < maxSpaceSize; i++) { 
     arry[i] = i; 
     cout << arry[i]; 
     cout << endl; 
    } 

    return 0; 
} 

我的目标是通过自动垃圾收集来制作和理解动态数组。在某些时候,我会要求用户定义数组的大小,并将其分配给maxSpaceSize。

感谢您的有益帮助。

+0

嗯...... ['arry.reset(nullptr)'](http://en.cppreference.com/w/cpp/memory/unique_ptr/reset)? – WhiZTiM

回答

2

我需要以任何方式管理这个数组吗?或者unique_ptr会照顾它吗?

std::unique_ptr会照顾。有一个专门为原料阵列删除器调用delete [] pointee;

我已阅读,如果ARRY被分配一个新的值,那么它将不再管理

这是错误的信息(重点是我的)。

assignment operator overload of std::unique_ptr将删除旧的pointee,并进一步照顾新的。

所以每当你喜欢写东西

maxSpaceSize = 50; 
arry = unique_ptr<int[]>(new int[maxSpaceSize]); 

这种行为将适用。

Live Demo

+0

如果'unique_ptr'不能拥有它,任何人都无法做到。 – user4581301

相关问题