Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Model C++.pdf
Скачиваний:
123
Добавлен:
17.02.2016
Размер:
671.98 Кб
Скачать

ДИНАМІЧНИЙ РОЗПОДІЛ ПАМ’ЯТІ

Для більш ефективного використання пам’яті часто доводиться розроблювати класи, в яких розмір об’єкту залежить від даних, що в ньому зберігаються. В таких структурах часто об’єм потрібної пам’яті стає відомим лише безпосередньо перед ініціалізацією конкретного об’єкта даного класу. Це призводить до необхідності динамічного керування пам’яттю. Для цих цілей в С++ передбачено два оператори new та delete. Оператор new дозволяє виділити пам’ять об’єкту, оператор delete дозволяє звільнити пам’ять

Динамічний розподіл пам’яті вимагає використання покажчиків. Розглянемо приклади.

Динамічне виділення пам’яті під одновимірний масив

float* y; y=new float [5];

Очищення пам’яті, виділеної динамічно під одновимірний масив

delete y;

Динамічне виділення пам’яті під двовимірний масив

float** y; y=new float* [5];

for(i=0;i<5;i++) {y[i]= new float[5] };

Очищення пам’яті, виділеної динамічно під двовимірний масив

for(i=0;i<5;i++) {delete y[i] }; delete y;

Зрозуміло, що оператор new використовується в конструкторі, а оператор delete в деструкторі. Розглянемо приклад.

Нехай нам потрібен клас одновимірний вектор, розмір якого визначається у момент ініціалізації. Такий клас повинен мати конструктор з параметром, що вказує на розмір вектора та конструктор за замовчуванням, щоб не виникали аварійні ситуації при ініціалізації без параметрів. Будемо

20

вважати, що за замовчуванням наш вектор буде тривимірним. Щоб не ускладнювати приклад в описі класу покажемо лише конструктори та деструктори, а інші необхідні методи не показуватимемо.

class MyVector

{

private:

float *v; int size;

public:

MyVector(){size=3; v= new float[size];}; //конструктор за замовчуванням MyVector(int a) {size= a; v= new float[size];}; //конструктор з параметром ~MyVector(){delete[] v;};//деструктор

...

};

Контрольні запитання

1.Що таке конструктор?

2.Навіщо потрібен конструктор?

3.Як формується ім’я конструктора?

4.Що таке деструктор?

5.Як формується ім’я деструктора?

6.Навіщо потрібен деструктор?

7.Що таке конструктор за замовчуванням?

8.Скільки конструкторів може мати клас?

9.Скільки деструкторів може мати клас?

10.Для чого використовується оператор new?

11.Для чого використовується оператор delete?

21

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]