Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt beschreven hoe MFC frametoewijzingen en heap-toewijzingen uitvoert voor elk van de drie typische soorten geheugentoewijzingen:
Toewijzing van een reeks van bytes
Een reeks bytes reserveren in het frame
Definieer de matrix, zoals wordt weergegeven met de volgende code. De matrix wordt automatisch verwijderd en het geheugen wordt vrijgemaakt wanneer de matrixvariabele het bereik verlaat.
{ const int BUFF_SIZE = 128; // Allocate on the frame char myCharArray[BUFF_SIZE]; int myIntArray[BUFF_SIZE]; // Reclaimed when exiting scope }
Een matrix van bytes (of een primitief gegevenstype) toewijzen aan de heap
Gebruik de
newoperator met de matrixsyntaxis die in dit voorbeeld wordt weergegeven:const int BUFF_SIZE = 128; // Allocate on the heap char* myCharArray = new char[BUFF_SIZE]; int* myIntArray = new int[BUFF_SIZE];
De toewijzing van de matrices van de heap ongedaan maken
Gebruik de
deleteoperator als volgt:delete[] myCharArray; delete[] myIntArray;
Toewijzing van een gegevensstructuur
Een gegevensstructuur toewijzen aan het frame
Definieer de structuurvariabele als volgt:
struct MyStructType { int topScore; }; void MyFunc() { // Frame allocation MyStructType myStruct; // Use the struct myStruct.topScore = 297; // Reclaimed when exiting scope }Het geheugen dat door de structuur wordt bezet, wordt vrijgemaakt wanneer deze het bereik verlaat.
Gegevensstructuren toewijzen aan de heap
Gebruik
newom gegevensstructuren in het heapgeheugen toe te wijzen endeleteom ze vrij te geven, zoals wordt getoond in de volgende voorbeelden:// Heap allocation MyStructType* myStruct = new MyStructType; // Use the struct through the pointer ... myStruct->topScore = 297; delete myStruct;
Toewijzing van een object
Een object aan het frame toewijzen
Declareer het object als volgt:
{ CMyClass myClass; // Automatic constructor call here myClass.SomeMemberFunction(); // Use the object }De destructor voor het object wordt automatisch aangeroepen wanneer het object het bereik verlaat.
Een object toewijzen aan de heap
Gebruik de
newoperator, die een aanwijzer naar het object retourneert, om objecten toe te wijzen aan de heap. Gebruik dedeleteoperator om ze te verwijderen.In de volgende heap- en framevoorbeelden wordt ervan uitgegaan dat de
CPersonconstructor geen argumenten gebruikt.// Automatic constructor call here CMyClass* myClass = new CMyClass; myClass->SomeMemberFunction(); // Use the object delete myClass; // Destructor invoked during deleteAls het argument voor de
CPersonconstructor een aanwijzercharis, is de instructie voor frametoewijzing:CMyClass myClass("Joe Smith");De instructie voor heap-toewijzing is:
CMyClass* myClass = new CMyClass("Joe Smith");