我是否需要手动删除或管理此unique_ptr

时间:2017-02-20 22:07:24

标签: c++ arrays pointers integer managed

我是否需要以任何方式管理此数组,或者unique_ptr会处理它吗?我已经读过如果为arry分配了一个新值,那么它将不再被管理。我是新手,对此并不了解。

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。

感谢您提供有用的意见。

1 个答案:

答案 0 :(得分:2)

  

我是否需要以任何方式管理此数组,或者unique_ptr会处理它吗?

std::unique_ptr会照顾。对于要调用delete [] pointee;

的原始数组删除者,我们需要专门化
  

我已经读过,如果为arry分配了一个新值,那么 将不再受管理

这是错误的信息(强调我的)。

std::unique_ptr的{​​{3}}将删除旧的指针,并进一步处理新指针。

所以每当你写一些像

这样的东西
maxSpaceSize = 50;
arry = unique_ptr<int[]>(new int[maxSpaceSize]);

该行为将适用。

请参阅assignment operator overload