MetaTrader 5 herunterladen

FreeMode

Setzt das Flag von Speicherverwaltung.

void  FreeMode(
   bool  mode      // ein neues Flag
   )

Parameter

mode

[in]  Der neue Wert des Flags von Speicherverwaltung.

Rückgabewert

Nichts.

Hinweis

Setzen vom Speicherverwaltung-Flags ist ein wichtiger Punkt bei der Verwendung von der Klasse CArrayObj. Da die Array-Elemente sind Zeiger auf dynamische Objekte, ist es wichtig zu bestimmen, was mit ihnen beim Löschen aus dem Array zu tun.

Wenn ein Flag gesetzt ist, wird das Element automatisch durch den Operator delete beim Löschen aus dem Array gelöscht werden. Wenn kein Flag gesetzt ist, wird angenommen, dass ein Zeiger auf ein gelöschtes Objekt noch irgendwo im Anwenderprogramm bleibt und wird bei der Programm danach freigegeben.

Wenn das Anwenderprogramm das Flag der Speicherverwaltung löscht, muss der Benutzer die Verantwortung für die Entfernung von Array-Elementen vor dem Ende des Programms verstehen, denn sonst bleibt der Speicher, der durch den Elementen währende der Erstellung mit dem new-Operator belegt war, nicht freigegeben.

Wenn Datenmenge groß ist, kann dies zu Fehlfunktionen des Terminals führen. Wenn das Anwenderprogramm löscht nicht das Flag der Speicherverwaltung, gibt es eine andere "Fallgrube".

Verwendung von irgendwo in den lokalen Variablen gespeicherten Array-Elemente-Zeigern nach dem Entfernen des Array wird zu einem kritischen Fehler und Programmabbruch führen. Standardmäßig ist das Speicherverwaltung-Flag festgelegt, d.h. die Array-Klasse ist für die Freigabe des Speichers verantwortlich.

Beispiel:

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