FreeMode

Imposta il flag di gestione della memoria durante l'eliminazione di elementi della lista.

void  FreeMode(
   bool  mode      // nuovo valore
   )

Parametri

mode

[in] Nuovo valore del flag di gestione della memoria.

Nota

Impostare la flag di gestione della memoria è una parte importante della classe di utilizzo CList. Dal momento che gli elementi della lista sono puntatori ad oggetti dinamici, è importante per determinare che cosa fare con essi durante la rimozione dalla lista.

Se è impostato il flag, quando si rimuove un elemento dalla lista, l'elemento viene eliminato automaticamente dal l'operatore delete. Se il flag non è impostato, si presume che un puntatore all'oggetto eliminato è ancora da qualche parte nel programma utente e verrà deallocato dal programma più in la.

Se il programma utente ripristina la flag della gestione della memoria, gli utenti dovrebbero comprendere la loro responsabilità per la rimozione degli elementi della lista prima della terminazione del programma. Altrimenti, la memoria allocata per gli elementi del nuovo operatore non viene rilasciata.

Per grandi quantità di dati questo potrebbe portare anche ad un crash del terminale.

Se il programma utente non azzera il flag di gestione della memoria, c'è un altra "trappola"(pitfall). Quando gli elementi puntatore in una lista sono memorizzati da qualche parte nelle variabili locali, poi la rimozione della lista porterà ad un errore critico e crash del programma utente. Per default, viene impostato il flag di gestione della memoria, cioè la classe della lista è responsabile del rilascio degli elementi di memoria.

Esempio:

//--- esempio per CList::FreeMode(bool)  
#include <Arrays\List.mqh>  
//---  
void OnStart()  
  {  
   CList *list=new CList;  
   //---  
   if(list==NULL)  
     {  
      printf("Erorre creazione oggetto");  
      return;  
     }  
   //--- resetta modalità flag free  
   list.FreeMode(false);  
   //--- usa lista 
   //--- . . .  
   //--- elimina lista 
   delete list;  
  }