MetaTrader 5 herunterladen

AddArray

Am Ende des Arrays fügt Elementen aus einem anderen Array hinzu.

bool  AddArray(
   const CArrayObj *  src      // Ein Zeiger auf die Quelle
   )

Parameter

src

[in]  Ein Zeiger auf die Instanz der CArrayDouble-Klasse, die eine Quelle von Elementen für Hinzufügen ist.

Rückgabewert

Gibt bei Erfolg true zurück, false wenn die Elementen nicht hinzugefügt werden können.

Hinweis

Hinzufügen von Elementen aus dem Array ins Array ist eigentlich das Kopieren von Zeigern. Deshalb, wenn Sie die Methode anrufen, gibt es eine "Fallgrube" - ein Zeiger auf das dynamischen Objekt kann in mehr als eine Variable existieren.

//--- example
extern bool       make_error;
extern int        error;
extern CArrayObj *src;
//--- Eine Instanz der Klasse CArrayObj erstellen
//--- Der Speicherverwaltungsmechanismus ist aktiviert
CArrayObj *array=new CArrayObj;
//--- Elemente aus dem Quelle-Array hinzufügen (kopieren)
if(array!=NULL)
   bool result=array.AddArray(src);
if(make_error)
  {
   //--- Fehler machen
   switch(error)
     {
      case 0:
         //--- das Quelle-Array löschen, ohne sein Flag von Speichersteuerung zu prüfen
         delete src;
         //--- das Ergebnis:
         //--- Anruf ist möglich
         //--- ein "ungültiger" Zeiger im Empfänger-Array
         break;
      case 1:
         //--- den Speicherverwaltungsmechanismus im Quelle-Array deaktivieren
         if(src.FreeMode()) src.FreeMode(false);
         //--- aber das Quelle-Array nicht löschen
         //--- das Ergebnis:
         //--- nach dem Löschen des Empfänger-Array ist Anruf möglich
         //--- mit solchem Zeiger im Quelle-Array
         break;
      case 2:
         //--- den Speicherverwaltungsmechanismus im Quelle-Array deaktivieren
         src.FreeMode(false);
         //--- den Speicherverwaltungsmechanismus im Empfänger-Array deaktivieren
         array.FreeMode(false);
         //--- das Ergebnis:
         //--- Nach Abschluss des Programms, haben wir die "Speicherleck"
         break;
     }
  }
else
  {
   //--- den Speicherverwaltungsmechanismus im Quelle-Array deaktivieren
   if(src.FreeMode()) src.FreeMode(false);
   //--- das Quelle-Array löschen
   delete src;
   //--- das Ergebnis:
   //--- Anruf von Elementen des Empfänger-Arrays ist korrekt
   //--- Löschen vom Empfänger-Array löscht seinen Elemente
  }
 

Beispiel:

//--- 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;
  }