2016-06-08 14 views
-3

Wenn ich Speicher dynamisch einer statischen Variablen zuweise, sollte ich ihn freigeben oder wird er automatisch freigegeben?Wenn ich Speicher dynamisch einer statischen Variablen zuweisst, sollte ich ihn freigeben oder wird er automatisch freigegeben

static int* p; 

int f(){p = new int[50];} 

destructor::~destructor{delete p;} 
+1

"Wird es automatisch freigegeben?" – songyuanyao

+0

Es gibt keine "Speicherzuweisung für eine Variable". 'p = new int [50];' weist "nicht' p '' Speicher zu. – immibis

+0

Wenn Sie möchten, dass es freigegeben wird, während das Programm beendet wird oder die Bibliothek entladen wird, aber eine dynamische Zuweisung benötigt, versuchen Sie es mit einem Smart Pointer. –

Antwort

0

Sie müssen es natürlich selbst befreien! Warum würde es automatisch den Speicher freigeben, auf den es zeigt? Das ist die Idee der dynamischen Zuweisung, Sie wählen, wann Sie die Erinnerung loswerden sollen! Der Zeiger selbst p wird zerstört, aber der Speicher, auf den er zeigt, bleibt intakt, es sei denn, Sie geben zuerst delete p (d. H. Den Speicher, auf den er verweist) frei. Es ändert nichts, nur weil static ist.