Скачать MetaTrader 5

FreeMode

Устанавливает флаг управления памятью при удалении элементов списка.

void  FreeMode(
   bool  mode      // новое значение
   )

Параметры

mode

[in]  Новое значение флага управления памятью.

Примечание

Установка флага управления памятью - важный момент в использовании класса CList. Так как элементами списка являются указатели на динамические объекты, важно определить, что делать с ними при удалении из списка.

Если флаг установлен, то при удалении элемента из списка, элемент автоматически удаляется оператором delete. Если же флаг не установлен, то подразумевается, что указатель на удаляемый объект остается еще где-то в программе пользователя и будет освобожден ею (программой) впоследствии.

Если программа пользователя сбрасывает флаг управления памятью, пользователь должен понимать свою ответственность за удаление элементов списка перед завершением программы, так как в противном случае остается неосвобожденной память, занятая элементами при их создании оператором new.

При больших объемах данных, это может привести, в конце концов, даже к нарушению работоспособности терминала.

Если программа пользователя не сбрасывает флаг управления памятью, существует другой "подводный камень". Использование указателей-элементов списка, сохраненных где-нибудь в локальных переменных, после удаления списка, приведет к критической ошибке и аварийному завершению программы пользователя. По умолчанию флаг управления памятью установлен, то есть класс списка сам отвечает за освобождение памяти элементов.

Пример:

//--- example for CList::FreeMode(bool)  
#include <Arrays\List.mqh>  
//---  
void OnStart()  
  {  
   CList *list=new CList;  
   //---  
   if(list==NULL)  
     {  
      printf("Object create error");  
      return;  
     }  
   //--- reset free mode flag  
   list.FreeMode(false);  
   //--- use list  
   //--- . . .  
   //--- delete list  
   delete list;  
  }