Speicherverwaltung: Beispiele
Dieser Artikel beschreibt, wie MFC Framezuordnungen und -Heapbelegungen für alle drei typische Arten von Speicherbelegungen durchführen:
Ein Bytearray
Eine Datenstruktur
Ein Objekt
Zuordnung eines Bytearrays
Um ein Bytearray über den Frame zuordnen
Definieren Sie das Array wie durch den folgenden Code dargestellt. Das Array wird automatisch gelöscht und angegeben sein Arbeitsspeicher frei, wenn die Arrayvariablen den Bereich beendet wird.
{ const int BUFF_SIZE = 128; // Allocate on the frame char myCharArray[BUFF_SIZE]; int myIntArray[BUFF_SIZE]; // Reclaimed when exiting scope }
Um ein Bytearray (bzw. jedes primitiven Datentyp) auf dem Heap zuordnen
Verwenden Sie den Operator neu mit der Arraysyntax, die in diesem Beispiel gezeigt wird:
const int BUFF_SIZE = 128; // Allocate on the heap char* myCharArray = new char[BUFF_SIZE]; int* myIntArray = new int[BUFF_SIZE];
So Arrays vom Heap frei
Verwenden Sie den Operator löschen, wie folgt:
delete [] myCharArray; delete [] myIntArray;
Zuordnung einer Datenstruktur
So einer Datenstruktur über den Frame zuordnen
Definieren Sie die Strukturvariable, wie folgt:
struct MyStructType { int topScore; }; void MyFunc() { // Frame allocation MyStructType myStruct; // Use the struct myStruct.topScore = 297; // Reclaimed when exiting scope }
Der Speicher, der durch die Struktur belegt wird, wird freigegeben, wenn der Bereich beendet.
So Datenstrukturen auf dem Heap zuordnen
Verwenden Sie neu, um Datenstrukturen auf dem Heap zuzuordnen und löschen, um ihnen, wie dargestellt durch die folgenden Beispiele verwenden:
// Heap allocation MyStructType* myStruct = new MyStructType; // Use the struct through the pointer ... myStruct->topScore = 297; delete myStruct;
Zuordnung eines Objekts
So fügen Sie ein Objekt über den Frame zuordnen
Deklarieren Sie das Objekt, wie folgt:
{ CMyClass myClass; // Automatic constructor call here myClass.SomeMemberFunction(); // Use the object }
Der Destruktor für das Objekt automatisch aufgerufen, wenn das Objekt den Bereich beendet wird.
So fügen Sie ein Objekt auf dem Heap zuordnen
Verwenden Sie den Operator neu, der einem Zeiger auf das Objekt zurückgibt, um Objekte auf dem Heap zuzuordnen. Verwenden Sie den Operator löschen, um sie zu löschen.
Die folgenden Heap- und Framebeispiele wird davon ausgegangen, dass der Konstruktor CPerson keine Argumente akzeptiert.
// Automatic constructor call here CMyClass* myClass = new CMyClass; myClass->SomeMemberFunction(); // Use the object delete myClass; // Destructor invoked during delete
Wenn das Argument für den Konstruktor CPerson ein Zeiger auf char ist, wird die Anweisung für Framezuordnung:
CMyClass myClass("Joe Smith");
Die Anweisung für Heapreservierung ist:
CMyClass* myClass = new CMyClass("Joe Smith");