löschen automatische int-variable
Ich versuche zu lernen, die besten Gewohnheiten und Praktiken in C++, insbesondere umgebende Speicher-management. Ich habe verdorben worden an dieser front durch die Verwendung von BOGEN in meine iOS-apps, und der eingebaute GC in Java, sowie ein paar andere Sprachen, wo die GC aktiviert ist.
Ich verstehe, dass Sie verwenden delete
oder delete[]
zu dekonstruieren Zeiger. Meine Frage ist, wie man delete
Ganzzahlen oder andere Variablen eines Basis-Datentyps?
Mein Erster Gedanke war, dass da delete
scheint zu funktionieren nur mit Zeigern, kann ich dies tun:
int intToDelete = 6;
delete &intToDelete;
Also im Grunde, können Sie erstellen Sie einen Zeiger auf einen integer in den Speicher, und löschen Sie den integer mit diesem Zeiger?
intToDelete
. Wenn Sie den Bereich verlässt, hört er auf zu existieren. Automatisch.Ich wollte Antworten, doch dann merkte ich, dass ich schreiben würde, etwas sehr ähnlich zu this.
Ich sehe, was du da gemacht hast.
Vielen Dank für die WIRKLICH schnellen Antworten! Ich habe sogar gerade ein Buch über C++, und alles kommt ziemlich natürlich mit memory-management-die einzige Ausnahme!!! Nochmals vielen Dank, und sorry für meine "Anfänger-Unwissenheit."
Ihr Profil sagt, Sie wissen, Objective-C. Beachten Sie, dass dies ist genau das gleiche wie in Objective-C und C - ist es nur die automatische Speicherung auf dem stack.
InformationsquelleAutor | 2012-12-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
delete
unddelete[]
sollte nur verwendet werden, mit Zeiger, die Sie zugeordnet explizit mitnew
odernew[]
bzw. Insbesondere, für jedes mal, wenn Sienew
haben, sollten Sie eine entsprechendedelete
. Ebenso hat jedernew[]
muss eine entsprechendedelete[]
. Verwenden Sie niemals eine dieser Variablen, für die Sie nicht explizit Speicher belegt. Der compiler kümmert sich um die Speicherzuweisung (und Freigabe) für alle nicht-pointer-Variablen.new
erfordert ein smart-pointer, und jederdelete[]
erfordert, dass Sie immer drei Mitarbeiter überprüfen Sie Ihren code, um sicherzustellen, dass Sie nicht plötzlich grob inkompetent, nicht mitstd::vector
.Sollten Sie proably anders formulieren. Es sehr zweideutig. [Ich habe nicht downvote, wenn.]
Ein upvote wäre willkommen 😉
Danke für die Antwort! Verstehe ich jetzt. Bis-Abstimmung auf seinem Weg!
Sicherlich smart-Pointer sind die bevorzugte Art der Verwendung von Zeigern. Aber diese Frage ist mehr über primitive Datentypen als Zeiger. IMO, immer in der Debatte über die manuelle Zuweisung von Speicher und die Verwendung von smart-Pointern oder etwas ähnliches über den Rahmen dieser Frage.
InformationsquelleAutor Code-Apprentice
delete
ist für die Freigabe von Speicher im heap reserviert vonnew
Betreiber, unddelete[]
ist das Gegenstück fürnew[]
.Sie können nicht verwenden
delete
um die Freigabe der Zeiger, die nicht reserviert wurde durchnew
auch ein Zeiger vonmalloc
.InformationsquelleAutor Healer
Lokale Objekte reinigen sich automatisch. Dies ist eine der nützlichsten Funktionen von der Sprache, es kann auch erweitert werden durch RAII auf den nicht-lokalen Objekten. Insbesondere die Verwendung von
delete
ist ein massive rote fahne, dass Sie nicht die richtige automatische cleanup-tools, unddelete[]
ist noch schlimmer.Korrekte Verwendung von Bau und Zerstörung Semantik ist wichtig, um gut geschriebene C++ - code. Wenn Sie die manuelle Verwaltung von Speicher, du machst es falsch, es sei denn, Sie haben einen tatterigen compiler oder einige Besondere Umstände (die ich habe nie, jemals gesehen, alle Beispiele, die sich tatsächlich rechtfertigen).
InformationsquelleAutor Puppy