Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Den här artikeln beskriver hur MFC utför ramallokeringar och heap-allokeringar för var och en av de tre typiska typerna av minnesallokeringar:
Allokering av en matris med byte
Så här allokerar du en matris med byte i ramen
Definiera matrisen enligt följande kod. Matrisen tas bort automatiskt och dess minne frigörs när matrisvariabeln avslutar sitt omfång.
{ const int BUFF_SIZE = 128; // Allocate on the frame char myCharArray[BUFF_SIZE]; int myIntArray[BUFF_SIZE]; // Reclaimed when exiting scope }
Allokera en matris med byte (eller någon primitiv datatyp) på heapen
Använd operatorn
newmed matrissyntaxen som visas i det här exemplet:const int BUFF_SIZE = 128; // Allocate on the heap char* myCharArray = new char[BUFF_SIZE]; int* myIntArray = new int[BUFF_SIZE];
Frigöra arrayerna från heapen
Använd
delete-operatören på följande sätt:delete[] myCharArray; delete[] myIntArray;
Allokering av en datastruktur
Så här allokerar du en datastruktur i ramen
Definiera strukturvariabeln enligt följande:
struct MyStructType { int topScore; }; void MyFunc() { // Frame allocation MyStructType myStruct; // Use the struct myStruct.topScore = 297; // Reclaimed when exiting scope }Det minne som upptas av strukturen frigörs när strukturen går ur sitt omfång.
Så här allokerar du datastrukturer på heapen
Använd
newför att allokera datastrukturer på heapen ochdeleteför att deallokera dem, vilket visas i följande exempel:// Heap allocation MyStructType* myStruct = new MyStructType; // Use the struct through the pointer ... myStruct->topScore = 297; delete myStruct;
Allokering av ett objekt
Så här allokerar du ett objekt i ramen
Deklarera objektet på följande sätt:
{ CMyClass myClass; // Automatic constructor call here myClass.SomeMemberFunction(); // Use the object }Destruktor för objektet anropas automatiskt när objektet lämnar sitt omfång.
Så här allokerar du ett objekt på heapen
Använd operatorn
new, som returnerar en pekare till objektet, för att allokera objekt på heapen. Använd operatorndeleteför att ta bort dem.Följande heap- och ramexempel förutsätter att
CPersonkonstruktorn inte tar några argument.// Automatic constructor call here CMyClass* myClass = new CMyClass; myClass->SomeMemberFunction(); // Use the object delete myClass; // Destructor invoked during deleteOm argumentet för
CPersonkonstruktorn är en pekare tillcharär instruktionen för ramallokering:CMyClass myClass("Joe Smith");Instruktionen för heap-allokering är:
CMyClass* myClass = new CMyClass("Joe Smith");