Speicherverwaltung: Beispiele
In diesem Artikel wird beschrieben, wie MFC den Frame und Heapbelegungen für jede der drei typische Arten von Speicherbelegungen aus:
Ein Bytearray
Eine Datenstruktur
Ein Objekt
Zuordnung eines Bytearrays
So ordnen Sie einem Bytearray auf den Frame
Definieren Sie das Array wie im folgenden Code gezeigt.Das Array wird automatisch deaktiviert, und sein Speicher gegeben frei, wenn die Arrayvariable ihren Bereich endet.
{ const int BUFF_SIZE = 128; // Allocate on the frame char myCharArray[BUFF_SIZE]; int myIntArray[BUFF_SIZE]; // Reclaimed when exiting scope }
So fügen Sie ein Bytearray (oder einen Grunddatentyp) auf dem Heap zugeordnet werden
Verwenden Sie den Operator mit der Arraysyntax new 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];
Um die Arrays vom Heap freigegeben werden
Verwenden Sie den Operator delete wie folgt:
delete [] myCharArray; delete [] myIntArray;
Zuordnung einer Datenstruktur
So ordnen Sie eine Datenstruktur auf den Frame
Definieren Sie die Strukturvariablen wie folgt:
struct MyStructType { int topScore; }; void MyFunc() { // Frame allocation MyStructType myStruct; // Use the struct myStruct.topScore = 297; // Reclaimed when exiting scope }
Der Speicherplatz, der durch die Struktur belegt wird, wird verworfen, wenn er ihren Bereich endet.
So ordnen Sie auf dem Heap Datenstrukturen
Verwenden Sie new, um Datenstrukturen auf dem Heap und delete zuzuordnen, damit sie von gezeigt, wie die folgenden Beispiele nutzen:
// Heap allocation MyStructType* myStruct = new MyStructType; // Use the struct through the pointer ... myStruct->topScore = 297; delete myStruct;
Zuordnung eines Objekts
So ordnen Sie ein Objekt auf den Frame
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 den Bereich endet.
So fügen Sie ein Objekt auf dem Heap zugeordnet werden
Verwenden Sie den new-Operator, der einen Zeiger auf das Objekt zurückgibt, um Objekte auf dem Heap zuzuordnen.Verwenden Sie den Operator delete, um sie zu löschen.
Die folgenden Beispiele für Heap- und Frames davon ausgegangen, dass der CPerson-Konstruktor 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 Frames Zuordnung:
CMyClass myClass("Joe Smith");
Die Anweisung für Heapreservierung ist:
CMyClass* myClass = new CMyClass("Joe Smith");