MQL5 Der Compiler unterscheidet nicht zwischen einer Klasse und einem Zeiger auf sie - Seite 3

Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Bingo!
Nicht ganz ein Bingo. Bei einfachen Objekten funktioniert die Zuweisung mit dem Operator =. Es ist mit Sicherheit kein Fehler.
...
Nein. Wenn es nicht einen Zeiger auf Automatik zuweist, kopiert es ein Objekt - die Werte seiner Felder, aber nur bei einfachen Objekten.
Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests
Der MQL5 Compiler unterscheidet nicht zwischen einer Klasse und einem Zeiger
SemenTalonov, 2019.01.10 04:18
Seit wann sind sie definiert (Frage an die Entwickler)
und wie funktionieren sie? Der folgende kompilierte Code sieht wahnhaft aus
Und hier ist die Situation nicht eindeutig
Nicht gerade ein Bingo. Bei einfachen Objekten funktioniert die Zuweisung mit dem Operator =. Sicherlich kein Fehler.
Das ist richtig, das ist der wichtigste Punkt.
Ich persönlich bin der Meinung, dass man einen Zuweisungsoperator für Objekte nicht verwenden kann, wenn dieser Operator nicht explizit definiert ist, selbst wenn es sich um einfache Objekte handelt. Wir können uns immer noch irgendwie auf die Zuordnung von einfachen Strukturen einigen. Aber Klassen, in denen der Konstruktor notwendigerweise (zumindest implizit) aufgerufen wird, können nur durch explizit definierte Operatoren zugewiesen werden.
Meiner Meinung nach wurde dies getan, um Neulingen das Leben zu erleichtern.
Das ist richtig, das ist der wichtigste Punkt.
Ich persönlich bin der Meinung, dass man einen Zuweisungsoperator für Objekte nicht verwenden kann, wenn dieser Operator nicht explizit definiert ist, selbst wenn es sich um einfache Objekte handelt. Wir können uns irgendwie auf die Zuordnung von einfachen Strukturen einigen. Aber Klassen, deren Konstruktor notwendigerweise (zumindest implizit) aufgerufen wird, können nur mit explizit definierten Operatoren zugewiesen werden.
Meiner Meinung nach wurde dies getan, um Anfängern das Leben zu erleichtern.
Und komplexe sind praktisch - ohne sie kann man z. B. nicht MqlTradeRequest zurückgeben. Und bei Strukturen wird zwangsläufig auch ein Konstruktor aufgerufen.
Es gibt eine Theorie, dass MQL ein sehr abgespecktes C# ist. Es ist also verständlich, wie sich der MQL-Compiler in diesem Fall verhält. Schließlich werden die Klassen in C# immer im Heap platziert, daher:
Nun wollen wir uns mit dem Array m_A befassen. Da m_A ein Array von Klassen ist und Klassen immer im Heap platziert werden, muss nicht angegeben werden, ob das Array m_A ein Array von Zeigern oder ein Array von Objekten selbst ist, da nur die erste Variante immer für Klassen funktioniert. Da m_A immer ein Array von Zeigern ist, muss MQL nicht angeben, ob es Referenztypen oder signifikante Typen speichert. Daraus folgt, dass A* m_A[2] == A m_A[2]. Amen.
Es gibt eine Theorie, dass MQL ein sehr abgespecktes C# ist. Es ist also verständlich, wie sich der MQL-Compiler in diesem Fall verhält. Schließlich werden die Klassen in C# immer im Heap platziert, daher:
Nun wollen wir uns mit dem Array m_A befassen. Da m_A ein Array von Klassen ist und Klassen immer im Heap platziert werden, muss nicht angegeben werden, ob das Array m_A ein Array von Zeigern oder ein Array von Objekten selbst ist, da nur die erste Variante immer für Klassen funktioniert. Da m_A immer ein Array von Zeigern ist, muss MQL nicht angeben, ob es Referenztypen oder signifikante Typen speichert. Daraus folgt, dass A* m_A[2] == A m_A[2]. Amen.
Falsche Schlussfolgerung. m_A ist ein Array von Objekten, nicht von Zeigern. Und diese Objekte werden vollständig zerstört. Es ist nicht das neue A, das zerstört wird.
Falsche Ausgabe. m_A ist ein Array von Objekten, nicht von Zeigern. Und diese Objekte werden vollständig zerstört. Es ist nicht das neue A, das zerstört wird.
Das ist ein gutes Beispiel. Nun, dann lassen Sie uns weiter darüber nachdenken.
Pfft)) Ich bin schockiert darüber.
Puh)) Ich bin wirklich schockiert darüber.
Was ist daran falsch? Im einen Fall ein Objekt, im anderen Fall ein Zeiger.