2017-02-20 16 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が注意します。生の配列deleters私はARRYが新しい値を割り当てられますならば、それはは、もはやを管理しないことを読みましたdelete [] pointee;

を呼び出すようにするために専門があります。

これは間違った情報です(強調は私です)。

は、古いpointeeを削除し、さらに新しいものを処理します。

ですから、動作が適用されます

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

のようなものを書く時はいつでも。

Live Demo

+0

'unique_ptr'がそれを持つことができないなら、誰もすることができません。 – user4581301

関連する問題