Errores, fallos, preguntas - página 1637

 
Slawa:

1. ¿Cinco o cuatro? Voy a adivinar un cuatro. Sólo hay que ampliar la ventana del probador.

2. Cógelo y pruébalo

Jaja, muchas gracias (mt4)
1366 x 768 (( hay que estirar un tercio de la pantalla.
Su habilidad de clarividencia está en el nivel.

 
A100:

Tomemos un ejemplo más sencillo

Para decirlo formalmente, ¿cuántas llamadas del tipo A( A& ) hay? Uno. Al menos C++ no crea objetos intermedios

¿Quizás la RVO (optimización del valor de retorno) esté configurada por defecto en C++?
 
A100:

1. Doble llamada al constructor de copias

2. No hay mensaje de "memoria filtrada" (nuevo sin borrar)

  1. Correctamente se dijo sobre la optimización RVO (también hay NRVO), actualmente falta en el compilador MQL, pero se añadirá en el futuro (por ahora consideramos esta optimización como una tarea no prioritaria).
  2. no se reproduce, vuelva a comprobarlo, es posible que no haya especificado detalles importantes para la reproducción.
 
Ilyas: 2. no se reproduce, por favor, vuelva a comprobarlo, puede que no haya especificado detalles importantes para la reproducción.

Ejemplo simplificado

class A { public:
    A()          { Print( __FUNCTION__ ); }
    virtual ~A() { Print( __FUNCTION__ ); }
};
void OnStart()
{
    new A();
}

Resultado:

2016.08.15 14:17:39.093 Script1 (GBPUSD,M15) A::A

Conclusión: no se llama al destructor y no hay mensaje de fuga de memoria al mismo tiempo (como en el siguiente ejemplo)

//Script2.mq5
class A { public:
    A()          { Print( __FUNCTION__ ); }
    virtual ~A() { Print( __FUNCTION__ ); }
};
void OnStart()
{
    A *a = new A();
}

Resultado:

2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 16 bytes de memoria filtrada
2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 1 objeto de tipo A a la izquierda
2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) Quedan 1 objetos sin borrar
2016.08.15 14:26:27.992 Script2 (GBPUSD,M15) A::A

 
Gracias por la aclaración. Reproducido - no hay mensaje de fuga y aquí está la razón:

El optimizador está sobre-optimizado aquí, ya que no hay operaciones sobre la memoria o el puntero que fueron creados en el operador new, la asignación de esta memoria fue eliminada.

Estudiaremos si es necesario arreglar este "error" en el optimizador o mejorarlo para que guardar un puntero en una variable no utilizada no bloquee el borrado de la nueva operación.

 
Buenas tardes.
Por favor, avise a los desarrolladores por qué MQL4 y MQL5 tienen la función de eliminar una subventana de indicadores de un Asesor Experto, mientras que no tienen la función de crear una ventana de indicadores.
Tengo que utilizar plantillas o iniciar el indicador de ventana manualmente, lo que no es conveniente porque la información del gráfico se pierde.
También me gustaría poder iniciar y mostrar indicadores desde un archivo de recursos.
O aconsejar cómo hacerlo.
 
Slawa:

¿No fue usted quien organizó el "chivatazo de visualización"?

¿Qué te hace pensar que es un error? El nombre de la carpeta corresponde al número de puerto en el que se realizó la conexión

Era yo..... Gracias, lo tengo.
 
Hacer una macro
#define  MACROS(A) "##A##"
Quiero que MACROS(Num) sea sustituido por "Num", pero el resultado es siempre "##A###". ¿Es posible definir una macro para conseguir lo que quiero?

 

He hecho un pequeño descubrimiento para mí

void OnStart()
{  
  double dPrice = 1.08249;
  int iPrice = (int)((dPrice / _Point) + 0.1);
  double dNewPrice = iPrice * _Point; // При этом нормализации это значение не требует в OrderSend
  
  if (dPrice != dNewPrice)
    Print((string)(dPrice - dNewPrice)); 
}

Si abre una orden en Integer * Point (sin normalización) y luego solicita el precio de apertura, éste será diferente del Integer * Point no normalizado.

¿Por qué OrderSEnd utiliza SIEMPRE precios de enteros * puntos no normalizados?

 
fxsaber:
Estoy haciendo una macro en la que quiero que MACROS(Num) sea reemplazado por "Num", pero siempre resulta "##A###". ¿Es posible definir una macro para conseguir lo que quiero?

Eliminar las comillas del cuerpo de la macro

Para convertir un parámetro de macro en una cadena, utilice #:

#define  MACROS(A) #A
## se utiliza para concatenar fichas