FreeMode

Setzt das Flag von Speicherverwaltung beim Löschen von Elementen aus der Liste.

void  FreeMode(
   bool  mode      // ein neuer Wert
   )

Parameter

mode

[in]  Der neue Wert des Flags von Speicherverwaltung.

Hinweis

Setzen vom Speicherverwaltung-Flags ist ein wichtiger Punkt bei der Verwendung von der Klasse CList. Da die Elemente der Liste sind Zeiger auf dynamische Objekte, ist es wichtig zu bestimmen, was mit ihnen beim Löschen aus der Liste zu tun. Wenn ein Flag gesetzt ist, wird das Element automatisch durch den Operator delete beim Löschen aus der Liste 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 Elementen der Liste 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 Listenelemente-Zeigern nach dem Entfernen der Liste wird zu einem kritischen Fehler und Programmabbruch führen. Standardmäßig ist das Speicherverwaltung-Flag festgelegt, d.h. die Liste-Klasse ist für die Freigabe des Speichers verantwortlich.

Beispiel:

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