Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, MFC'nin üç tipik bellek ayırma türünün her biri için çerçeve ayırmalarını ve yığın ayırmalarını nasıl gerçekleştirdiği açıklanmaktadır:
Bayt Dizisi Tahsisi
Çerçevede bir bayt dizisi tahsis etmek için
Aşağıdaki kodda gösterildiği gibi diziyi tanımlayın. Dizi değişkeni kapsamından çıktığında dizi otomatik olarak silinir ve belleği geri kazanılır.
{ const int BUFF_SIZE = 128; // Allocate on the frame char myCharArray[BUFF_SIZE]; int myIntArray[BUFF_SIZE]; // Reclaimed when exiting scope }
Yığında bayt dizisi (veya ilkel bir veri türü) ayırmak için
newişleci, bu örnekte gösterilen dizi söz dizimiyle kullanın:const int BUFF_SIZE = 128; // Allocate on the heap char* myCharArray = new char[BUFF_SIZE]; int* myIntArray = new int[BUFF_SIZE];
Dizileri yığından serbest bırakmak için
işlecini
deleteaşağıdaki gibi kullanın:delete[] myCharArray; delete[] myIntArray;
Veri Yapısının Tahsisi
Çerçevede bir veri yapısı tahsis etmek için
Yapı değişkenini aşağıdaki gibi tanımlayın:
struct MyStructType { int topScore; }; void MyFunc() { // Frame allocation MyStructType myStruct; // Use the struct myStruct.topScore = 297; // Reclaimed when exiting scope }Yapının kapladığı bellek, kapsamdan çıktığında geri kazanılır.
Yığındaki veri yapılarını ayırmak için
Veri yapılarını yığından ayırmak için
newve serbest bırakmak içindeletekullanın, aşağıdaki örneklerde gösterildiği gibi:// Heap allocation MyStructType* myStruct = new MyStructType; // Use the struct through the pointer ... myStruct->topScore = 297; delete myStruct;
Nesne Ayırma
Çerçevede bir nesneyi tahsis etmek için
nesnesini aşağıdaki gibi bildirin:
{ CMyClass myClass; // Automatic constructor call here myClass.SomeMemberFunction(); // Use the object }Nesnenin yıkıcısı, nesne kapsamından çıktığında otomatik olarak çağrılır.
Yığında bir nesne ayırmak için
Heap üzerinde nesneleri ayırmak için nesneye bir işaretçi döndüren
newişlecini kullanın. bunları silmek için işlecinideletekullanın.Aşağıdaki yığın ve çerçeve örneklerinde, oluşturucunun
CPersonbağımsız değişken almaz olduğu varsayılır.// Automatic constructor call here CMyClass* myClass = new CMyClass; myClass->SomeMemberFunction(); // Use the object delete myClass; // Destructor invoked during deleteOluşturucu için
CPersonbağımsız değişkenichar'e işaretçi ise, çerçeve ayırma deyimi şöyledir:CMyClass myClass("Joe Smith");Yığın ayırma ifadesi şöyledir:
CMyClass* myClass = new CMyClass("Joe Smith");