Heim > Artikel > Backend-Entwicklung > Gibt „vector::clear()“ den Speicher der darin gespeicherten Objekte frei?
Speicherverwaltung in C: Vektoren löschen vs. Objekte löschen
In C ist es wichtig zu verstehen, wie der Speicher verwaltet wird. Beim Umgang mit dynamischen Datenstrukturen wie Vektoren und Zeigern ist die entsprechende Freigabe des zugewiesenen Speichers von entscheidender Bedeutung.
Betrachten Sie das folgende Codebeispiel:
<code class="cpp">tempObject obj1; tempObject obj2; vector<tempObject> tempVector; tempVector.pushback(obj1); tempVector.pushback(obj2); tempVector.clear();</code>
Es stellt sich die Frage, ob der Aufruf von clear() auf a Der Vektor gibt den von den darin enthaltenen Objekten belegten Speicher automatisch frei?
Für Vektoren, die halten Objekte
Während der Aufruf von clear() die Objekte innerhalb des Vektors zerstört, gibt er den zugewiesenen Speicher nicht frei. Es hilft auch nicht, die Vektorelemente zu durchlaufen und sie einzeln zu löschen.
Um den mit dem Vektor verbundenen Speicher effektiv freizugeben, können Sie die folgende Strategie verwenden:
<code class="cpp">vector<tempObject>().swap(tempVector);</code>
Dadurch wird ein erstellt leerer Vektor ohne zugewiesenen Speicher und tauscht ihn mit tempVector aus, wodurch der Speicher effektiv freigegeben wird.
Für Vektoren, die Zeiger auf enthalten Objekte
Das Verhalten ist ähnlich für Vektoren, die Zeiger auf Objekte halten. Der Aufruf von clear() für einen Zeigervektor zerstört die Zeiger, nicht jedoch die Objekte, auf die sie verweisen. Um den Speicher freizugeben, haben Sie zwei Möglichkeiten:
Die Funktion „shrink_to_fit“ von C 11
C 11 hat die Funktion „shrink_to_fit“ eingeführt, die nach „clear(“ aufgerufen werden kann. ). Obwohl es theoretisch die Kapazität des Vektors verkleinert, um sich an seine Größe anzupassen, ist es wichtig zu beachten, dass es sich hierbei um eine unverbindliche Anfrage handelt und von einigen Implementierungen ignoriert werden kann.
Das obige ist der detaillierte Inhalt vonGibt „vector::clear()“ den Speicher der darin gespeicherten Objekte frei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!