Errores, fallos, preguntas - página 1785
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
Sé para qué sirve el destructor. No me queda claro por qué la palabra virtual debe escribirse antes de su definición.
Lo necesito para la compatibilidad del código con C++, porque los destructores son diferentes allí
Sé para qué sirve el destructor. No entiendo por qué hay que añadir la palabra virtual antes de su definición.
Funciones virtuales y destructor >>>
La regla básica: si tienes al menos una función virtual en tu clase, el destructor también debe ser virtual. Recuerda que el destructor no es virtual por defecto, por lo que debes declararlo explícitamente. Si no lo haces, es casi seguro que tendrás fugas de memoria en tu programa. Una vez más, no hace falta ser muy inteligente para entender por qué. Veamos varios ejemplos.
Lo tengo, gracias. ¿Produces mucho a MQL5? - ¿Por eso los ejemplos son tan específicos?
Funciones virtuales y destructor >>>
{
A * pA = new B;
delete pA;
return EXIT_SUCCESS;
}
Esta vez el objeto se construye como debería, pero cuando se destruye, se produce una fuga de memoria, porque no se llama al destructor de la clase derivada.
La razón es que la eliminación se realiza a través de un puntero a una clase base y el compilador utiliza la vinculación temprana para llamar al destructor. El destructor de la clase base no puede llamar al destructor de la clase derivada porque no sabe nada de ella. Como resultado, parte de la memoria asignada para la clase derivada se pierde irremediablemente.Para evitar esto, el destructor en la clase base debe ser declarado como virtual.
No entiendo arquitectónicamente por qué, al hacer virtual el destructor base, aparece información sobre el destructor derivado.
Ahora entiendo que cuando la base es virtual, entonces al definir un destructor derivado estamos sustituyendo el destructor base por uno derivado. Pero entonces el destructor base no debería ser llamado en este ejemplo.
Obviamente, no entiendo cómo funciona esto. Nunca he tenido problemas con las funciones virtuales en MQL5. Me gusta mucho la OOP por ellos. Pensé que lo había entendido todo. Ahora tengo un completo dilema. Por favor, explíquemelo en sus propios términos.
Retratando poco. Específicos sólo a primera vista. Algunos "expertos" escribieron aquí que TODO lo que sea más de 3 clases derivadas es perjudicial. A menudo sólo tengo 3-4 clases base para inicializar correctamente y sólo entonces comienzan los verdaderos derivados
Pero entonces el destructor base no debería ser llamado en este ejemplo.
Es llamado por el destructor derivado implícitamente. En realidad, eso es lo que lo diferencia de las simples funciones virtuales.
Error de SymbolInfoTick() que devuelve datos irrelevantes - rebasamiento de ticks. Compilación 1525 x64. Prueba desde el indicador, no probó en el Asesor Experto:
Real, Apertura, Servidor de Acceso V. ¡Tristeza! Presta atención al problema, por favor. Y también al problema en la solicitud#1598238 (a partir de la página 10, post de2017.01.26 09:43).
Queridos desarrolladores, ¡arreglemos los ticks! ¡Código proporcionado, aquí está - el problema, no hay necesidad de buscar nada, sólo reaccionar y solucionarlo!