FreeMode

Imposta il flag di gestione della memoria.

void  FreeMode(
   bool  mode      // nuovo flag
   )

Parametri

mode

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

Valore di ritorno

Nessuno.

Nota

L' impostare la flag di gestione della memoria è una parte importante della classe di utilizzo CArrayObj. Dal momento che gli elementi dell'array sono puntatori a oggetti dinamici, è importante determinare che cosa fare con loro durante la rimozione dall'array.

Se il flag è impostato, la rimozione di un elemento dall'array, l'elemento viene cancellato automaticamente dall'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 il flag di gestione della memoria, l'utente deve capire la sua responsabilità per la rimozione dell'array prima della fine 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 vostro terminale.

Se l'utente non azzera il flag di gestione della memoria, c'è un altro trabocchetto. Quando gli elementi puntatore a matrice vengono memorizzati da qualche parte nelle variabili locali, allora la rimuozione dell'array porterà ad un errore critico e crash del programma utente. Per default, viene impostato il flag di gestione della memoria, cioè la classe dell'array è responsabile di liberare gli elementi di memoria.

Esempio:

//--- esempio per CArrayObj::FreeMode(bool)
#include <Arrays\ArrayObj.mqh>
//---
void OnStart()
  {
   CArrayObj *array=new CArrayObj;
   //---
   if(array==NULL)
     {
      printf("Errore creazione oggetto");
      return;
     }
   //--- resetta la flag free mode
   array.FreeMode(false);
   //--- usa array
   //--- . . .
   //--- elimina array
   delete array;
  }