AddArray

Aggiunge elementi di un array alla fine di un altro.

bool  AddArray(
   const CArrayObj *  src      // puntatore alla sorgente array
   )

Parametri

src

[in] Puntatore ad un'istanza della classe CArrayDouble - sorgente di elementi da aggiungere.

Valore di ritorno

true - successo, false - non si possono aggiungere elementi.

Nota

Aggiunta di elementi da array ad array è in realtà la copia dei puntatori. Pertanto, quando si chiama il metodo, c'è un trabocchetto - ci può essere un puntatore a un oggetto dinamico in più di una variabile.

//--- esempio
extern bool       make_error;
extern int        error;
extern CArrayObj *src;
//--- crea nuova istanza CArrayObj
//--- il mamagement della memoria default è ON
CArrayObj *array=new CArrayObj;
//--- aggiunta (copia) degli elementi dall'array sorgente
if(array!=NULL)
   bool result=array.AddArray(src);
if(make_error)
  {
   //--- esegue azioni erronee 
   switch(error)
     {
      case 0:
         //--- rimuove l'array sorgente senza controllare la flag del management della memoria 
         delete src;
         //--- risultato:
         //--- è possibile indirizzare un elemento per puntatore non valito nell'array ricevente
         break;
      case 1:
         //--- disabilita il meccanismo del management della memoria nell'array sorgente
         if(src.FreeMode()) src.FreeMode(false);
         //--- ma non rimuove l'array sorgente
         //--- risultato:
         //--- dopo aver rimosso l'array ricevente, è possibile indirizzare un elemento per puntatore non valido, nell'array sorgente
         break;
      case 2:
         //--- disabilita il meccanismo del management della memoria nell'array sorgente
         src.FreeMode(false);
         //--- disabilita il meccanismo di management della memoria nell'array ricevente
         array.FreeMode(false);
         //--- risultato:
         //--- dopo la terminazione del programma, ottiene un "memory leak" (perdita di memoria)
         break;
     }
  }
else
  {
   //--- disabilita il meccanismo di management della memoria nell'array sorgente
   if(src.FreeMode()) src.FreeMode(false);
   //--- elimina l'array sorgente
   delete src;
   //--- result:
   //--- l'indirizzamento dell'array ricevente sarà corretto
   //--- l'eliminazione dell'array ricevente porterà all'eliminazione dei suoi elementi
  }
 

Esempio:

//--- esempio per CArrayObj::AddArray(const CArrayObj*)
#include <Arrays\ArrayObj.mqh>
//---
void OnStart()
  {
   CArrayObj *array=new CArrayObj;
   //---
   if(array==NULL)
     {
      printf("Errore creazione oggetto");
      return;
     }
   //--- crea l'array sorgente
   CArrayObj *src=new CArrayObj;
   if(src==NULL)
     {
      printf("Errore creazione oggetto");
      delete array;
      return;
     }
   //--- resetta la flag free mode
   src.FreeMode(false);
   //--- riempie l'array sorgente
   //--- . . .
   //--- aggiunge un altro array
   if(!array.AddArray(src))
     {
      printf("Errorre aggiuta array");
      delete src;
      delete array;
      return;
     }
   //--- elimina l'array sorgente senza elementi
   delete src;
   //--- usa array
   //--- . . .
   //--- elimina array
   delete array;
  }