Zarządzanie pamięcią: przykłady
W tym artykule opisano, jak MFC wykonuje ramki Alokacje sterty i dla każdego z trzech typowe rodzaje alokacji pamięci:
Tablica bajtów
Struktura danych
Obiekt
Alokacja tablicę bajtów
Aby przydzielić tablicę bajtów w ramce
Definiowanie tablicy, jak pokazano w następującym kodzie.Tablica jest automatycznie usuwany, a jego pamięci odzyskane zmiennej tablicy, kiedy jej zakresu.
{ const int BUFF_SIZE = 128; // Allocate on the frame char myCharArray[BUFF_SIZE]; int myIntArray[BUFF_SIZE]; // Reclaimed when exiting scope }
Aby przydzielić tablicę bajtów (lub dowolnego typu danych pierwotnych) na stercie
Użyj Nowy operatora z składnia tablicy w poniższym przykładzie:
const int BUFF_SIZE = 128; // Allocate on the heap char* myCharArray = new char[BUFF_SIZE]; int* myIntArray = new int[BUFF_SIZE];
Aby cofnąć tablice ze sterty
Użyj usunąć operatora w następujący sposób:
delete [] myCharArray; delete [] myIntArray;
Alokacja struktury danych
Aby zaalokować strukturę danych w ramce
Definiowanie zmiennej struktury w następujący sposób:
struct MyStructType { int topScore; }; void MyFunc() { // Frame allocation MyStructType myStruct; // Use the struct myStruct.topScore = 297; // Reclaimed when exiting scope }
Pamięć zajmowanych przez struktury jest regeneracji, kiedy to jej zakresu.
Aby przydzielić struktur danych na stercie
Użyj Nowy przydzielić struktur danych na stercie i usunąć należy cofnąć, jak pokazano w poniższych przykładach:
// Heap allocation MyStructType* myStruct = new MyStructType; // Use the struct through the pointer ... myStruct->topScore = 297; delete myStruct;
Alokacja obiektu
Aby przydzielić obiektu w ramce
Obiekt należy zadeklarować w następujący sposób:
{ CMyClass myClass; // Automatic constructor call here myClass.SomeMemberFunction(); // Use the object }
Destruktora dla obiektu jest automatycznie wywoływane, kiedy obiekt jego zakres.
Aby przydzielić obiektu na stercie
Użyj Nowy operator, który zwraca wskaźnik do obiektu, przydzielić obiektów na stercie.Użyj usunąć operatora, aby je usunąć.
Następujące przykłady sterty i ramki zakładać, że CPerson konstruktora nie przyjmuje żadnych argumentów.
// Automatic constructor call here CMyClass* myClass = new CMyClass; myClass->SomeMemberFunction(); // Use the object delete myClass; // Destructor invoked during delete
Jeśli argument dla CPerson Konstruktor jest wskaźnik do char, instrukcja alokacji ramki jest:
CMyClass myClass("Joe Smith");
Instrukcja dla alokacji sterty jest:
CMyClass* myClass = new CMyClass("Joe Smith");