Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Los destructores en MQL5 son siempre virtuales. Todo se borra correctamente, intenta poner Print(__FUNCSIG__); en los destructores.
Lo hice en VC++, pero creo que los mecanismos de liberación de memoria son los mismos?
Pero tu ejemplo funcionará correctamente, porque puedes especificar el destructor virtual sólo para la clase base.
Intentaré exponer la idea de una manera ligeramente diferente:
Dada:
Acciones:
P.D.: la figura muestra el modelo de memoria )
Dudas porque el puntero a la clase número uno y en realidad en la memoria la clase número dos. Sí importa en el caso de los destructores, por lo que me preguntaba si puede haber un problema aquí también. Creo que en tal situación la liberación correcta de la memoria puede ocurrir sólo si hay algunas etiquetas en la memoria (como char con terminador cero) o algo así, por eso pregunté sobre la asignación de memoria.
Tu duda es porque no has especificado los constructores (es importante entender lo que pasa en este caso), intenta ejecutar este ejemplo y lo entenderás todo:
HZ tanto la construcción en sí como el borrado se escalonan, y toda esta información se almacena (el propio puntero virtual recuerda que la clase se construyó como un compuesto a partir de la base y la descendiente), y al borrar se llaman los destructores en orden inverso, desde el posterior al anterior.
No se trata de los destructores, sino de la propia clase, y más concretamente de cuántos bytes ocupa. Resulta que asignamos 200 bytes y luego me dicen que libere la memoria apuntada por el puntero que representa el objeto con el tamaño de 100 bytes.
Sí, el pool de memoria sabe cuánto tiempo se liberará un trozo de memoria mediante una llamada de borrado.
El lugar donde se almacena esta información depende de la implementación del pool.
Por ejemplo, si das un puntero a un objeto en C++ que no se asigna a través de new, verás cómo tu aplicación se bloquea.
No se trata de los destructores, sino de la propia clase, y más concretamente de cuántos bytes ocupa. Resulta que asignamos 200 bytes y luego me dicen que libere la memoria apuntada por el puntero que representa el objeto con el tamaño de 100 bytes.
Entiendo que tu pregunta tiene que ver con el funcionamiento del pool de memoria.
Sí, el pool de memoria sabe cuánto tiempo se liberará una pieza por una llamada de borrado.
El lugar donde se almacena esta información depende de la implementación del pool.
Por ejemplo, si le das un puntero a un objeto en C++ que no fue asignado a través de new, verás como tu aplicación se bloqueará.