Fehler, Irrtümer, Fragen - Seite 1637

 
Slawa:

1. Fünf oder vier? Ich tippe mal auf eine Vier. Vergrößern Sie einfach das Fenster des Testers.

2. nehmen Sie es und testen Sie es

Haha, vielen Dank (mt4)
1366 x 768 (( ein Drittel des Bildschirms muss gestreckt werden.
Deine Fähigkeit zur Hellsichtigkeit ist ebenbürtig.

 
A100:

Nehmen wir ein einfacheres Beispiel

Um es formell auszudrücken: Wie viele Aufrufe der Art A( A& ) gibt es? Erstens. Zumindest erzeugt C++ keine Zwischenobjekte

Vielleicht ist RVO (Return Value Optimization) in C++ standardmäßig eingestellt?
 
A100:

1. Doppelter Aufruf des Kopierkonstruktors

2. Keine Meldung "Leck im Speicher" (neu ohne Löschen)

  1. Richtig gesagt, über die RVO-Optimierung (es gibt auch NRVO), ist es derzeit fehlt in der MQL-Compiler, sondern wird in der Zukunft hinzugefügt werden (für jetzt betrachten wir diese Optimierung als eine nicht-prioritäre Aufgabe).
  2. nicht reproduzierbar ist, überprüfen Sie bitte, ob Sie wichtige Details für die Reproduktion nicht angegeben haben.
 
Ilyas: 2. nicht reproduzierbar ist, überprüfen Sie bitte, ob Sie wichtige Details für die Reproduktion nicht angegeben haben.

Vereinfachtes Beispiel

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

Ergebnis:

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

Fazit: Es wird kein Destruktor aufgerufen und gleichzeitig keine Meldung über ein Speicherleck ausgegeben (wie im folgenden Beispiel)

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

Ergebnis:

2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 16 Bytes ausgelaufener Speicher
2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 1 Objekt vom Typ A übrig
2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 1 nicht gelöschte Objekte übrig
2016.08.15 14:26:27.992 Script2 (GBPUSD,M15) A::A

 
Danke für die Klarstellung. Reproduziert - keine Leckagemeldung und warum?

Der Optimierer ist hier überoptimiert, da es keine Operationen auf den Speicher oder Zeiger gibt, die im new-Operator erstellt wurden, die Zuweisung dieses Speichers wurde entfernt.

Wir werden überlegen, ob wir diesen "Fehler" im Optimierer beheben oder ihn so verbessern, dass das Speichern eines Zeigers in einer unbenutzten Variablen das Löschen der neuen Operation nicht blockiert.

 
Guten Tag.
Bitte teilen Sie den Entwicklern mit, warum MQL4 und MQL5 die Funktion haben, ein Indikator-Unterfenster aus einem Expert Advisor zu entfernen, während sie nicht die Funktion haben, ein Indikatorfenster zu erstellen.
Ich muss Vorlagen verwenden oder den Fensterindikator manuell starten, was unpraktisch ist, weil die Informationen im Diagramm verloren gehen.
Ich möchte auch Indikatoren aus einer Ressourcendatei starten und anzeigen können.
Oder Ratschläge, wie man es macht.
 
Slawa:

Warst du nicht derjenige, der den "Visualisierungs-Tipp" organisiert hat?

Wie kommen Sie darauf, dass es ein Fehler ist? Der Name des Ordners entspricht der Anschlussnummer, über die die Verbindung hergestellt wurde

Das war ich..... Danke, ich hab's.
 
Ein Makro erstellen
#define  MACROS(A) "##A##"
Ich möchte, dass MACROS(Num) durch "Num" ersetzt wird, aber das Ergebnis ist immer "##A###". Ist es möglich, ein Makro zu definieren, um das zu erreichen, was ich will?

 

Ich habe für mich eine kleine Entdeckung gemacht

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)); 
}

Wenn Sie einen Auftrag zu Integer * Point (ohne Normalisierung) eröffnen und dann den Eröffnungskurs abfragen, wird er sich von dem nicht normalisierten Integer * Point unterscheiden.

Warum verwendet OrderSEnd IMMER nicht-normierte Integer * Point Preise?

 
fxsaber:
Ich mache ein Makro, bei dem MACROS(Num) durch "Num" ersetzt werden soll, aber es wird immer "##A###" angezeigt. Ist es möglich, ein Makro zu definieren, um das zu erreichen, was ich will?

Entfernen Sie die Anführungszeichen aus dem Text des Makros

Um einen Makroparameter in eine Zeichenkette umzuwandeln, verwenden Sie #:

#define  MACROS(A) #A
## wird zur Verkettung von Token verwendet
Grund der Beschwerde: