2017-02-20 73 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

相關問題