ݺߣ

ݺߣShare a Scribd company logo
Динамична памет.
Оператори new и delete в C++.



  New               Delete
Какво представлява динамичната
памет (хийп) ?
   Хийпът е по-постоянна област за
    съхранение на данни от стека.


   Не се свързва с променливи.


   Работи се чрез указатели.


   Използва се при работа с динамични
    структури от данни.
Динамичните данни
   Обекти, чиито брой не е известен в момента
    на проектиране на програмата.



   Те се създават и разрушават по всяко време на
    изпълнението ѝ.




• След разрушаването паметта
  се освобождава.
Оператор new - Синтаксис
    Синтаксис
     new <име_на_тип> [[size]]опц |
     new <име_на_тип> (<инициализация>)

1.    size – показва броя на компонентите
      от тип <име_на_тип>, за който да се
      задели памет
Оператор new - Семантика
 Заделя в хийпа
1. sizeof(<име_на_тип>) байта ако не са
   зададени size и <инициализация>

2.   sizeof(<име_на_тип>)*size байта, ако е
     явно указан size

3.   sizeof(<име_на_тип>) ако е
     специфицирана <инициализация>,
     която памет се инициализира с нея и
     връща указател.
Примери:
   int* q = new int(2+5*5); - 4B памет -> 27
    и свързва q с адреса на паметта.

   int* p = new int[10]; - 40B за 10 ел-та и
    свъзва p с адреса на паметта.

   rat* r = new rat; - за обект от тип rat,
    записва адреса в r, извиква
    конструктора по default.
Видове заделяне на памет
   По време на компилация (статично
    заделяне)



   По време на изпълнение (динамично
    заделяне) – създадените променливи,
    обекти, класове и др. се наричат
    динамични.
Променливи
   Активност на променлива – частта от
    времето, през което променливата е
    свързана с определено място в паметта.

   Глобални променливи – заделя се в
    началото и остава до завършване.

   Локални пром. – заделя се при влизане в
    локалната област.

   Динамични обекти – заделя се чрез new
Оператор delete - Синтаксис


   Освобождава явно динамична
    променлива.




   Синтаксис
    delete <указател_към_динам_обект>;
Оператор delete - Семантика
   Разрушава обекта, адресиран от
    указателя, като паметта, която заема
    този обект, се освобождава.



   Ако обектът е обект на клас, то първо
    се извиква деструкторът и след това се
    освобождава паметта.
Пример
   int* arr = new int[5];
    delete [] arr;

   Когато трябва да се унищожи
    единичен обект се използва само
    delete, а за масив - delete [].

   Операторът се използва само за памет
    заделена с new.
Примерна програма
   Да се напише програма, която създава динамичен масив от
    естествени числа, след което го извежда.
     int main(){
           int size; //дължина на масива
           do
           {
           cout << „size of array:“;
           cin >> size;
           } while (size < 1);
     int* arr = new int[size]; // дин. масив arr от size ел-та от тип int
           int i;
     for(i=0 i<= size-1, i++)
     arr[i]=i;
           for(i=0 i<= size-1, i++) // извеждане на ел-тите на масива
           cout << arr[i] << „ “ ;
           cout << endl;
     delete [] arr; // освобождаване на заетата памет
     return 0;
    }
Изготвил: Георги Мирчев
Фак. No - 0901261023

More Related Content

Динамична памет (оператори new и delete) в C++

  • 2. Какво представлява динамичната памет (хийп) ?  Хийпът е по-постоянна област за съхранение на данни от стека.  Не се свързва с променливи.  Работи се чрез указатели.  Използва се при работа с динамични структури от данни.
  • 3. Динамичните данни  Обекти, чиито брой не е известен в момента на проектиране на програмата.  Те се създават и разрушават по всяко време на изпълнението ѝ. • След разрушаването паметта се освобождава.
  • 4. Оператор new - Синтаксис  Синтаксис new <име_на_тип> [[size]]опц | new <име_на_тип> (<инициализация>) 1. size – показва броя на компонентите от тип <име_на_тип>, за който да се задели памет
  • 5. Оператор new - Семантика  Заделя в хийпа 1. sizeof(<име_на_тип>) байта ако не са зададени size и <инициализация> 2. sizeof(<име_на_тип>)*size байта, ако е явно указан size 3. sizeof(<име_на_тип>) ако е специфицирана <инициализация>, която памет се инициализира с нея и връща указател.
  • 6. Примери:  int* q = new int(2+5*5); - 4B памет -> 27 и свързва q с адреса на паметта.  int* p = new int[10]; - 40B за 10 ел-та и свъзва p с адреса на паметта.  rat* r = new rat; - за обект от тип rat, записва адреса в r, извиква конструктора по default.
  • 7. Видове заделяне на памет  По време на компилация (статично заделяне)  По време на изпълнение (динамично заделяне) – създадените променливи, обекти, класове и др. се наричат динамични.
  • 8. Променливи  Активност на променлива – частта от времето, през което променливата е свързана с определено място в паметта.  Глобални променливи – заделя се в началото и остава до завършване.  Локални пром. – заделя се при влизане в локалната област.  Динамични обекти – заделя се чрез new
  • 9. Оператор delete - Синтаксис  Освобождава явно динамична променлива.  Синтаксис delete <указател_към_динам_обект>;
  • 10. Оператор delete - Семантика  Разрушава обекта, адресиран от указателя, като паметта, която заема този обект, се освобождава.  Ако обектът е обект на клас, то първо се извиква деструкторът и след това се освобождава паметта.
  • 11. Пример  int* arr = new int[5]; delete [] arr;  Когато трябва да се унищожи единичен обект се използва само delete, а за масив - delete [].  Операторът се използва само за памет заделена с new.
  • 12. Примерна програма  Да се напише програма, която създава динамичен масив от естествени числа, след което го извежда. int main(){ int size; //дължина на масива do { cout << „size of array:“; cin >> size; } while (size < 1); int* arr = new int[size]; // дин. масив arr от size ел-та от тип int int i; for(i=0 i<= size-1, i++) arr[i]=i; for(i=0 i<= size-1, i++) // извеждане на ел-тите на масива cout << arr[i] << „ “ ; cout << endl; delete [] arr; // освобождаване на заетата памет return 0; }