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 Ayırma

Çerçevede bir bayt dizisi ayırmak 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 herhangi bir ilkel veri türü) ayırmak için

  1. new bu örnekte gösterilen dizi söz dizimi ile işlecini 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ı Ayırma

Çerçevede bir veri yapısı ayırmak 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ı tarafından kaplanan bellek, kapsamından çıktığında geri kazanılır.

Yığındaki veri yapılarını ayırmak için

  1. Aşağıdaki örneklerde gösterildiği gibi yığındaki veri yapılarını ayırmak ve delete serbest bırakmak için kullanınnew:

    // Heap allocation
    MyStructType* myStruct = new MyStructType;
    
    // Use the struct through the pointer ...
    myStruct->topScore = 297;
    
    delete myStruct;
    

Nesne Ayırma

Çerçevede bir nesne ayırmak 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. Yığındaki new nesneleri ayırmak için nesneye bir işaretçi döndüren 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şturucunun CPerson bağımsız değişkeni işaretçiyse char, çerçeve ayırma deyimi şöyledir:

    CMyClass myClass("Joe Smith");
    

    Yığın ayırma deyimi şöyledir:

    CMyClass* myClass = new CMyClass("Joe Smith");
    

Ayrıca bkz.

Bellek Yönetimi: Öbek Ayırma