Getch();
}
Рис.1. Результат работы программы Пример_2
Обратите внимание,что когда вы создаете переменную типа класса, т.е. экземпляр класса (например, A min;, где min – это экземпляр класса), то для этого экземпляра никакой памяти не выделяется. А компилятор все-таки размещает этот экземпляр где-то в памяти. Почему?
Среди исполнения приложений в Си++ выделяют два вида памяти: статическую и динамическую. Последняя носит название «куча» (heap). Куча может быть управляемой и неуправляемой. Если компилятор способен определить размер памяти под объявленную переменную, то он выделяет для нее место в статической памяти (например, под переменную типа int из 10 элементов он выделит 40 байтов). Если компилятор не в состоянии определить размер памяти под объявленную переменную, то он потребует от программиста поместить такую переменную в куче – в динамической памяти. Кстати, если программист сам хочет работать с динамической памятью (даже когда компилятор может поместить переменную в статистической памяти), то язык это ему не позволяет. Для простых переменных при этом используются:
· Функция malloc(), которая выделяет область памяти в динамической области и возвращает указатель на эту область.
· Функция free(), которая освобождает занятую переменной область и передает освобожденную память в общее пользование.
Если же работа происходит с объектами, то здесь используются операторы new – аналог malloc(), и delete – аналог free().
Указанные функции и аналогичные им операторы работают с неуправляемой кучей. С управляемой кучей работает утилита gcnew и нет необходимости освобождать самому
память от объекта, поскольку в этом случае работает так называемая автоматическая сборка мусора: когда объект становится ненужным, память от него освобождается.
Но приведем пример этой же программы (пример_1), в которой используется (по нашему желанию) динамическая память:
В данном случае оператор new размещает объект в куче, выдает адрес этого объекта, а конструктор инициализирует объект.
Пример_3: //KIIUT.cpp: главный файл проекта.
#include <iostream.h> //for cout
#include <conio.h> // for _getch()
Дата добавления: 2015-07-30; просмотров: 717;