FreeMode

Establece la bandera de gestión de memoria.

void  FreeMode(
   bool  mode      // Bandera nueva
   )

Parámetros

mode

[in] Valor nuevo de la bandera de gestión de memoria.

Valor devuelto

Ninguno.

Nota

Configurar la bandera de gestión de memoria es un aspecto importante en el uso de la clase CArrayObj. Dado que los elementos del array son punteros a objetos dinámicos es importante determinar qué hacer con ellos al borrarlos del array.

Si se establece la bandera, al eliminar un elemento del array, el elemento se borra automáticamente por medio del operador delete. Si no se establece la bandera, se asume que todavía existe un puntero al objeto eliminado en algún lugar del programa, y el programa lo liberará a continuación.

Si el usuario reinicia la bandera de gestión de memoria, entonces debe entender que tiene que responsabilizarse de la eliminación del array antes de que finalice el programa, porque de lo contrario, la memoria será ocupada por otros elementos al crear el nuevo operador.

Si el usuario no reinicia la bandera de gestión de memoria, se puede incluso estropear el terminal al manejar grandes cantidades de datos.

Almacenar punteros y arrays en variables locales después de borrar el array, dará lugar a errores críticos y bloqueos del programa. De forma predeterminada, queda establecida la bandera de gestión de memoria; la clase del array se responsabiliza de liberar la memoria de los elementos.

Ejemplo:

//--- ejemplo de CArrayObj::FreeMode(bool)
#include <Arrays\ArrayObj.mqh>
//---
void OnStart()
  {
   CArrayObj *array=new CArrayObj;
   //---
   if(array==NULL)
     {
      printf("Error en la creación del objeto");
      return;
     }
   //--- reiniciar la bandera
   array.FreeMode(false);
   //--- utiliza el array
   //--- . . .
   //--- borra el array
   delete array;
  }