2017-02-20 3 views
0

Muss ich dieses Array in irgendeiner Weise verwalten oder wird sich unique_ptr darum kümmern? Ich habe gelesen, dass, wenn Arry einen neuen Wert zugewiesen bekommt, es nicht mehr verwaltet wird. Ich bin neu dazu, verstehe es nicht sehr gut.Muss ich dieses unique_ptr manuell löschen oder verwalten?

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; 
} 

Mein Ziel ist es, dynamische Arrays mit automatischer Garbage Collection zu machen und zu verstehen. Irgendwann würde ich den Benutzer bitten, die Größe des Arrays zu definieren und diese würde maxSpaceSize zugewiesen werden.

Danke für hilfreiche Eingabe.

+0

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

Antwort

2

Muss ich dieses Array in irgendeiner Weise verwalten oder kümmert sich unique_ptr darum?

Die std::unique_ptr wird vorsichtig sein. Es gibt eine Spezialisierung für Roh-Array Löscher delete [] pointee;

nennen ich gelesen, dass wenn arry dann einen neuen Wert zugewiesen bekommt es nicht mehr verwaltet werden.

Das sind falsche Informationen (Betonung meiner).

Die assignment operator overload von std::unique_ptr löscht den alten Zeiger und kümmert sich um den neuen.

Also, wenn Sie schreiben, so etwas wie

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

das Verhalten gelten.

Siehe Live Demo

+0

Wenn 'unique_ptr' es nicht haben kann, kann niemand. – user4581301

Verwandte Themen