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