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
1) pensé que había un error aquí:
Sección: Pasar parámetros al constructor"La función Init() está apartada en la sección privada para asegurar que la clase puede ser reiniciada".
posible:
La función Init() se aparta en la sección pública para ofrecer la posibilidad de reinicializar la clase.
2) Por favor, proporcione un ejemplo de uso de la función"crear una matriz con instancias de clase (objetos)" para la sección "Matriz de objetos". Lamentablemente, no consigo entender "para qué se utiliza".
3) En la sección "Más sobre encapsulación (private, protected, public)", se menciona de pasada la descendencia clase base->clase. Quizás este dato(clase Class: public CBase) debería explicarse al principio de la sección, porque me he dado cuenta más tarde.
4) no encontré:Fig.6. La visibilidad de la función "extra" (flecha roja) viene determinada por el tipo de puntero con el que se carga la clase. Este ejemplo se encuentra en el apéndice en el archivo OOP_sDefaultVirtual_1.mq5.
5) No he encontrado una indicación clara de lo que es una biblioteca. Aparentemente, ¿una forma de almacenar la(s) clase(s) de las funciones? es decir, similar al archivo de inclusión, sólo que el archivo de inclusión se almacena como una fuente, y la biblioteca como una dll compilada?
Muchas gracias por el artículo. Me ha gustado especialmente la presentación coherente del material.
1) pensé que había un error aquí:
Sección: Pasar parámetros al constructor"La función Init() está apartada en la sección privada para asegurar que la clase puede ser reiniciada".
posible:
La función Init() se aparta en la sección pública para ofrecer la posibilidad de reinicializar la clase.
2) Por favor, proporcione un ejemplo de uso de la función"crear una matriz con instancias de clase (objetos)" para la sección "Matriz de objetos". Lamentablemente, no consigo entender "para qué se utiliza".
3) En la sección "Más sobre encapsulación (private, protected, public)", se menciona de pasada la descendencia clase base->clase. Quizás este dato(clase Class: public CBase) debería explicarse al principio de la sección, porque me di cuenta más tarde.
4) no encontré:Fig.6. La visibilidad de la función "extra" (flecha roja) viene determinada por el tipo de puntero con el que se carga la clase. Este ejemplo se encuentra en el apéndice en el archivo OOP_sDefaultVirtual_1.mq5.
5) No he encontrado una indicación clara de lo que es una biblioteca. Aparentemente, ¿una forma de almacenar la(s) clase(s) de las funciones? es decir, similar al archivo de inclusión, sólo que el archivo de inclusión se almacena como una fuente, y la biblioteca como una dll compilada?
Muchas gracias por el artículo. Me ha gustado especialmente la presentación coherente del material.
1. Sí.
2. Hay un ejemplo en la sección "Array de objetos", en realidad toda la sección es un ejemplo con una descripción.
3. Se considera en la sección "Uso de la POO para cambiar la lógica de funcionamiento del programa".
4. Las palabras "Este ejemplo se encuentra en el apéndice del fichero..." significa que el fichero contiene un ejemplo para la sección indicada por la cabecera de la sección. Esto no significa que los ejemplos dupliquen todo lo escrito en el artículo. Estos ejemplos pueden no existir en absoluto, todo está escrito en el artículo. Pero los ejemplos están ahí, puedes tomarlos como base y experimentar. El artículo es primario, los ejemplos son secundarios.
5. Уже давно указано: http://ru.wikipedia.org/wiki/%C1%E8%E1%EB%E8%EE%F2%E5%EA%E0_(%EF%F0%EE%E3%F0%E0%EC%EC%E8%F0%EE%E2%E0%ED%E8%E5)
Artículo muy interesante, escrito en un lenguaje competente y "accesible".
Gracias al autor.
Tengo dos ejemplos de código basados/copiados de este artículo. Ambos crean un array de punteros a una clase y luego los borran al salir. Sin embargo, uno sale con una fuga de memoria y el otro sale sin fuga de memoria. La única diferencia es que el segundo ejemplo tiene la "alerta" en el destructor comentada. Cuando se elimina la alerta en el destructor se produce una fuga de memoria. Esto es muy extraño. ¿Alguien puede explicarlo? Por favor, ayuda, esto me está volviendo LOCO.
Al final de los ejemplos de código de este artículo he incluido un ejemplo extremadamente simple de código que escribí que también tiene una fuga de memoria. De nuevo, por qué???? No hay nada complicado en este ejemplo final de código...
Este código funciona sin fugas de memoria:
Mensajes del registro de expertos, no hay fugas de memoria:
PI 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 0
KP 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 1
JG 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 2
ES 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 3
LF 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 4
OM 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 5
FD 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 6
IK 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 7
HS 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 8
CJ 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 9
¡¡¡¡Este código sale CON una fuga de memoria!!!! Por qué????????? La única diferencia es comentar el 'Alert' en el destructor...
Mensajes del registro de expertos, observe la fuga de memoria:
FM 1 OOP_sConstDestr_2 (EURUSD,M1) 13:51:19 Quedan 10 objetos sin borrar
EG 1 OOP_sConstDestr_2 (EURUSD,M1) 13:51:19 Quedan 10 objetos de tipo CName
GO 1 OOP_sConstDestr_2 (EURUSD,M1) 13:51:19 200 bytes de memoria filtrada
Ejemplo final , mi código, muy simple pero sale con una fuga de memoria....
Mensajes del log del experto, observe la memoria filtrada:
MR 0 tester (EURUSD,M1) 14:07:23 Last Error- 0 Hora actual: 2013.02.06 23:07:23
FL 1 tester (EURUSD,M1) 14:07:23 Quedan 10 objetos sin borrar
KN 1 tester (EURUSD,M1) 14:07:23 Quedan 10 objetos de tipo CCandleStick
JS 1 tester (EURUSD,M1) 14:07:23 160 bytes de memoria filtrada
Tengo dos ejemplos...
Comprobados los tres varaints. Los tres son idénticos. Todos son normales. Ninguno da fugas. En estos ejemplos, no puede ser - tenemos el array, en cada elemento del array tenemos instancia, al terminar borramos todos los objetos. Los objetos no crean copias de sí mismos, no se puede perder para eliminar samething. Si el objeto crea una copia de sí mismo, entonces podemos tener dificultades con la eliminación, muy fácil de perder algo. Mostrar variantes que realmente tienen fugas.
Utilice el botón SRC para insertar código (mejor - adjuntar archivos).
Lo siento por mi Inglés:)
Comprobados los tres varaints. Los tres son idénticos. Todos son normales. Ninguno da fugas. En estos ejemplos, no puede ser - tenemos el array, en cada elemento del array tenemos instancia, al terminar borramos todos los objetos. Los objetos no crean copias de sí mismos, no se puede perder para eliminar samething. Si el objeto crea una copia de sí mismo, entonces podemos tener dificultades con la eliminación, muy fácil de perder algo. Mostrar variantes que realmente tienen fugas.
Utilice el botón SRC para insertar código (mejor - adjuntar archivos).
Lo siento por mi Inglés:)
Muchas gracias por tomarse el tiempo para responder. No estoy seguro de que viste mi pregunta de seguimiento. Fue en un comentario separado que probablemente fue borrado porque no estoy muy familiarizado con este foro. Sin embargo, he intentado ejecutar los tres ejemplos en un equipo antiguo con una versión anterior de MetaTrader. En la versión anterior de los 3 parecía funcionar bien. No generó un registro de expertos 'fuga de memoria' error, creo que fue construir 560??Creo que era la build 560?? no lo recuerdo y actualicé la 560 a la nueva build 756. Después de la nueva build tengo los mismos problemas de fuga de memoria. ¿Es posible que la antigua build no informara de los problemas de fuga de memoria porque no era una característica? ¿Qué build estás utilizando? Gracias de nuevo.