Основы языка
© 2000-2011, MetaQuotes Software Corp.
158
Создание и уничтожение объектов
После загрузки на исполнение mql5-программы каждой переменной выделяется память в
соответствие с типом переменной. Переменные делятся на два типа по уровню доступа -
глобальные переменные и локальные переменные, и по классам памяти: входные параметры
mql5-программы, статические и автоматические. Каждая переменная при необходимости
инициализируется соответствующим значением. После использования переменная
деинициализируется и память, использованная ею, возвращается исполняемой системе MQL5.
Инициализация и деинициализация глобальных переменных
Инициализация глобальных переменных производится автоматически сразу после загрузки mql5-
программы и до вызова любой функции. При инициализации производится присвоение начальных
значений переменным простых типов и вызывается конструктор для объектов, если он есть.
Входные переменные всегда объявляются на глобальном уровне, инициализируются значениями,
задаваемыми пользователями в диалоге при запуске mql5-программы.
Несмотря на то, что статические переменные обычно объявляются на локальном уровне, память
под эти переменные распределяется заранее, и инициализация производится сразу после загрузки
программы, точно так же как и для глобальных переменных.
Порядок инициализации соответствует порядку объявления переменной в программе, а
деинициализации производится в обратном порядке перед выгрузкой mql5-программы. Это
правило только для тех переменных, которые не были созданы оператором new. Такие
переменные создаются и инициализируются автоматически сразу после загрузки, а
деинициализируются непосредственно перед выгрузкой программы.
Инициализация и деинициализация локальных переменных
Если переменная, объявленная на локальном уровне не является статической, то распределение
памяти под такую переменную производится автоматически. Локальные переменные, также как и
глобальные, инициализируются автоматически в тот момент, когда выполнение программы
встречает объявление локальной переменной. Таким образом, порядок инициализации
соответствует порядку объявления.
Локальные переменные деинициализируются в конце блока программы, в котором они
объявлены, и в порядке, обратном их объявлению. Блок программы – это составной оператор,
который может являться частью оператора выбора switch, цикла(for, while, do-while), телом
функции или частью оператора if-else.
Инициализация локальных переменных происходит только в тот момент, когда выполнение
программы доходит до объявления переменной. Если в процессе выполнения программы блок, в
котором объявлена переменная, не был выполнен, то такая переменная не инициализируется.
Инициализация и деинициализация динамически размещаемых
объектов
Особый случай представляет из себя указатели объектов, так как объявление указателя не влечет
за собой инициализации соответствующего объекта. Динамически размещаемые объекты
инициализируются только в момент создания экземпляра класса оператором new. Инициализация