Discusión sobre el artículo "La Orden de Creación y Destrucción de Objetos en MQL5" - página 3

 

En el Archivo  localvar_testscript_4.mq5

Si despues de la llamada a GetPointer(),  imprimimos el tipo de puntero, nos indica que los punteros son POINTER_AUTOMATIC no POINTER_DINAMIC

m_array[i]=GetPointer(array[i]);
Print(EnumToString(CheckPointer(m_array[i])));  //POINTER_AUTOMATIC  no  POINTER_DINAMIC

Por lo tanto esta linea nunca se ejecuta

if(CheckPointer(m_array[i])==POINTER_DYNAMIC) delete(m_array[i]);
 

<quote.

@En este orden de declaración,items_array se destruye antes de que se destruya el array [5]. En la función Destroy(), a la que se llama desde el destructor deitems_array, se trabaja con punteros a objetos aún existentes, por lo que no se producen errores.

¡Hola a todos!

Aquí es donde no entiendo la lógica del todo. =)

Al fin y al cabo, en el método Destroy comparamos el tipo de nuestro puntero con un tipo dinámico. Y nuestro tipo es automático. Por lo tanto, el operador delete no se utiliza.

Pero no es necesario, porque los objetos creados automáticamente se borran automáticamente.

Y por último, el archivo se olvidó de especificar el tipo de valor de retorno void para los métodos Destroy y SetArray en la etapa de implementación de métodos fuera de la Clase, debido a lo cual arroja un error.

Los novatos (como yo) pueden asustarse =)


void CItemArray::Destroy(void)
  {
   for(int i=0;i<ArraySize(m_array);i++)
     {
      if(CheckPointer(m_array[i])!=POINTER_INVALID)
        {
         if(CheckPointer(m_array[i])==POINTER_DYNAMIC) delete(m_array[i]);
        }
      else Print("Invalid pointer to delete");
     }
  }