Aracılığıyla paylaş


Bellek Yönetimi: Örnekler

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

  1. 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

  1. new iş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

  1. işlecini delete aş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

  1. 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

  1. Veri yapılarını yığından ayırmak için new ve serbest bırakmak için delete kullanı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

  1. 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

  1. Heap üzerinde nesneleri ayırmak için nesneye bir işaretçi döndüren new işlecini kullanın. bunları silmek için işlecini delete kullanın.

    Aşağıdaki yığın ve çerçeve örneklerinde, oluşturucunun CPerson bağı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 delete
    

    Oluşturucu için CPerson bağımsız değişkeni char'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");
    

Ayrıca bakınız

Bellek Yönetimi: Küme Ayırma