Descargar MetaTrader 5

AddArray

Añade al final del array los elementos de otro array.

bool  AddArray(
   const CArrayObj *  src      // Puntero al array fuente
   )

Parámetros

src

[in] Puntero a una instancia de la clase CArrayDouble que contiene los elementos fuente que se desean añadir.

Valor devuelto

true si se ejecuta correctamente, false - si los elementos no se pueden añadir.

Nota

En realidad, la adición de elementos en el array consiste en una copia de punteros. Por lo tanto, al llamar a este método, hay una referencia que puede ser un puntero a un objeto dinámico de más de una variable.

//--- ejemplo
extern bool       make_error;
extern int        error;
extern CArrayObj *src;
//--- Crear una nueva instancia de CArrayObj
//--- La gestión predeterminada de la memoria está activada
CArrayObj *array=new CArrayObj;
//--- Añadir (copiar) los elementos del array fuente
if(array!=NULL)
   bool result=array.AddArray(src);
if(make_error)
  {
   //--- Realizar las acciones de los errores
   switch(error)
     {
      case 0:
         //--- Borrar el array fuente, sin comprobar su bandera de gestión de memoria 
         delete src;
         //--- Resultado:
         //--- Se puede direccionar un elemento con un puntero no válido del array receptor
         break;
      case 1:
         //--- Desactiva el mecanismo de gestión de memoria del array fuente
         if(src.FreeMode()) src.FreeMode(false);
         //--- Sin eliminar el array fuente
         //--- Resultado:
         //--- Después de borrar el array receptor se puede direccionar un elemento con un puntero no válido del array fuente
         break;
      case 2:
         //--- Desactiva el mecanismo de gestión de memoria del array fuente
         src.FreeMode(false);
         //--- Desactiva el mecanismo de gestión de memoria del array receptor 
         array.FreeMode(false);
         //--- Resultado:
         //--- Después de terminar el programa se obtiene una "pérdida de memoria"
         break;
     }
  }
else
  {
   //--- Desactiva el mecanismo de gestión de memoria del array fuente
   if(src.FreeMode()) src.FreeMode(false);
   //--- Borra el array fuente
   delete src;
   //--- Resultado:
   //--- Direccionar el elemento del array receptor será correcto
   //--- Borrar el array receptor implicará borrar sus elementos
  }
 

Ejemplo:

//--- ejemplo de CArrayObj::AddArray(const CArrayObj*)
#include <Arrays\ArrayObj.mqh>
//---
void OnStart()
  {
   CArrayObj *array=new CArrayObj;
   //---
   if(array==NULL)
     {
      printf("Error en la creación del objeto");
      return;
     }
   //--- crea el array fuente
   CArrayObj *src=new CArrayObj;
   if(src==NULL)
     {
      printf("Error en la creación del objeto");
      delete array;
      return;
     }
   //--- reiniciar la bandera
   src.FreeMode(false);
   //--- llenar el array fuente
   //--- . . .
   //--- añade otro array
   if(!array.AddArray(src))
     {
      printf("Error al añadir el array");
      delete src;
      delete array;
      return;
     }
   //--- borrar el array fuente sin elementos
   delete src;
   //--- utiliza el array
   //--- . . .
   //--- borra el array
   delete array;
  }