Speicherverwaltung: Beispiele
In diesem Artikel wird beschrieben, wie MFC Framezuordnungen und Heap-Zuordnungen für jede der drei typischen Arten von Speicherzuweisungen durchführt:
Zuweisung eines Bytearrays
So weisen Sie ein Bytearray für den Frame zu
Definieren Sie das Array wie im folgenden Code dargestellt. Das Array wird automatisch gelöscht und sein Speicher zurückgefordert, wenn die Arrayvariable ihren Bereich verlässt.
{ const int BUFF_SIZE = 128; // Allocate on the frame char myCharArray[BUFF_SIZE]; int myIntArray[BUFF_SIZE]; // Reclaimed when exiting scope }
So weisen Sie ein Bytearray (oder einen beliebigen primitiven Datentyp) für den Heap zu
Verwenden Sie den
new
Operator mit der in diesem Beispiel gezeigten Arraysyntax:const int BUFF_SIZE = 128; // Allocate on the heap char* myCharArray = new char[BUFF_SIZE]; int* myIntArray = new int[BUFF_SIZE];
So verlagern Sie die Arrays aus dem Heap
Verwenden Sie den
delete
Operator wie folgt:delete[] myCharArray; delete[] myIntArray;
Zuordnung einer Datenstruktur
So weisen Sie eine Datenstruktur für den Frame zu
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 von der Struktur belegte Speicher wird wieder beansprucht, wenn er seinen Bereich verlässt.
So weisen Sie Datenstrukturen auf dem Heap zu
Wird
new
verwendet, um Datenstrukturen für den Heap zuzuweisen unddelete
sie zuzuordnen, wie in den folgenden Beispielen gezeigt:// Heap allocation MyStructType* myStruct = new MyStructType; // Use the struct through the pointer ... myStruct->topScore = 297; delete myStruct;
Zuordnung eines Objekts
So weisen Sie ein Objekt auf dem Frame zu
Deklarieren Sie das Objekt wie folgt:
{ CMyClass myClass; // Automatic constructor call here myClass.SomeMemberFunction(); // Use the object }
Der Destruktor für das Objekt wird automatisch aufgerufen, wenn das Objekt seinen Bereich verlässt.
So weisen Sie ein Objekt auf dem Heap zu
Verwenden Sie den
new
Operator, der einen Zeiger auf das Objekt zurückgibt, um Objekte für den Heap zuzuweisen. Verwenden Sie dendelete
Operator, um sie zu löschen.In den folgenden Heap- und Framebeispielen wird davon ausgegangen, dass der
CPerson
Konstruktor keine Argumente verwendet.// 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
CPerson
Konstruktor ein Zeigerchar
ist, lautet die Anweisung für die Framezuordnung:CMyClass myClass("Joe Smith");
Die Anweisung für die Heap-Zuordnung lautet:
CMyClass* myClass = new CMyClass("Joe Smith");