Скачать MetaTrader 5

AddArray

Добавляет в конец массива элементы из другого массива.

bool  AddArray(
   const CArrayObj *  src      // указатель на источник
   )

Параметры

src

[in]  Указатель на экземпляр класса CArrayDouble – источник элементов для добавления.

Возвращаемое значение

true в случае успеха, false – если нет возможности добавить элементы.

Примечание

Добавление элементов из массива в массив фактически является копированием указателей. В связи с этим, при вызове метода, существует "подводный камень" - возможность существования указателя на динамический объект более чем в одной переменной.

//--- example
extern bool       make_error;
extern int        error;
extern CArrayObj *src;
//--- создаем новый экземпляр CArrayObj
//--- по умолчанию механизм управления памятью в нем включен
CArrayObj *array=new CArrayObj;
//--- добавляем (копируем) элементы из массива-источника
if(array!=NULL)
   bool result=array.AddArray(src);
if(make_error)
  {
   //--- совершаем ошибочные действия
   switch(error)
     {
      case 0:
         //--- удаляем массив-источник, не проверив его флаг управления памятью
         delete src;
         //--- результат:
         //--- возможно обращение 
         //--- по "битому" указателю в массиве-приемнике
         break;
      case 1:
         //--- выключаем механизм управления памятью в массиве-источнике
         if(src.FreeMode()) src.FreeMode(false);
         //--- но не удаляем массив-источник
         //--- результат:
         //--- после удаления массива-приемника, возможно обращение 
         //--- по "битому" указателю в массиве-источнике
         break;
      case 2:
         //--- выключаем механизм управления памятью в массиве-источнике
         src.FreeMode(false);
         //--- выключаем механизм управления памятью в массиве-приемнике
         array.FreeMode(false);
         //--- результат:
         //--- после завершения программы, получаем "утечку памяти"
         break;
     }
  }
else
  {
   //--- выключаем механизм управления памятью в массиве-источнике
   if(src.FreeMode()) src.FreeMode(false);
   //--- удаляем массив-источник
   delete src;
   //--- результат:
   //--- обращение к элементам массива-приемника будет корректным
   //--- удаление массива-приемника приведет к удалению его элементов
  }
 

Пример:

//--- example for CArrayObj::AddArray(const CArrayObj*)
#include <Arrays\ArrayObj.mqh>
//---
void OnStart()
  {
   CArrayObj *array=new CArrayObj;
   //---
   if(array==NULL)
     {
      printf("Object create error");
      return;
     }
   //--- create source array
   CArrayObj *src=new CArrayObj;
   if(src==NULL)
     {
      printf("Object create error");
      delete array;
      return;
     }
   //--- reset free mode flag
   src.FreeMode(false);
   //--- fill source array
   //--- . . .
   //--- add another array
   if(!array.AddArray(src))
     {
      printf("Array addition error");
      delete src;
      delete array;
      return;
     }
   //--- delete source array without elements
   delete src;
   //--- use array
   //--- . . .
   //--- delete array
   delete array;
  }


Обновлено: 2015.12.03
Add