MQL5 Der Compiler unterscheidet nicht zwischen einer Klasse und einem Zeiger auf sie - Seite 4
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
dass sie gleichwertig sind
dass sie gleichwertig sind.
Vergessen Sie diese Zuschreibung ganz.
Vergessen Sie diesen Auftrag ganz und gar.
Es liegt also nicht an mir, das zu vergessen, sondern am Compiler, der es nicht zulassen sollte, dass man es so schreibt.
Und im Moment kompiliert es nicht nur, sondern läuft auch ohne Fehler!
Nicht ich muss es also vergessen, sondern der Compiler, der es nicht zulassen sollte , dass es so geschrieben wird.
Und im Moment kompiliert es nicht nur, sondern läuft auch ohne Fehler!
Der Compiler erlaubt es, weil man es kann, wenn man weiß, was man tut.
class A { public: int iValue; A(){Print("++");} ~A(){Print("--");} }; //...................... A m_A[2]; void OnStart() { A a; m_A[0] =a; m_A[1] = new A(); }
Führen Sie das Programm aus und sehen Sie, wie oft und wann der Konstruktor und der Destruktor aufgerufen werden.
m_A[0]=a; in diesem Fall ist es gleich: m_A[0].iWert=a.iWert;
new A() erzeugt in diesem Fall ein neues Objekt, nennen wir es temp, und es geschieht Folgendes: m_A[1].iWert=temp.iWert;
Führen Sie das Programm aus und sehen Sie, wie oft und wann der Konstruktor und der Destruktor aufgerufen werden.
m_A[0]=a; in diesem Fall ist es gleich: m_A[0].iWert=a.iWert;
Die zweite Zeile in diesem Beispiel ist falsch
Sie können einen Zeiger nicht in einem Objekt speichern. Der Compiler bemerkt es einfach nicht.
In diesem Beispiel ist die zweite Zeile nicht korrekt
Sie können einen Zeiger nicht in einem Objekt speichern. Und der Compiler bemerkt es nicht.
Führen Sie das Programm aus und sehen Sie, wie oft und wann der Konstruktor und der Destruktor aufgerufen werden.
m_A[0]=a; in diesem Fall ist es gleich: m_A[0].iWert=a.iWert;
new A() erzeugt in diesem Fall ein neues Objekt, nennen wir es temp, und es geschieht Folgendes: m_A[1].iWert=temp.iWert;
Wahrscheinlich Konstruktor 3, Destruktor 2. Der Rest ist richtig.
und es geschieht Folgendes: m_A[1].iWert=temp.iWert;
Dies ist die 4. Auslegung!))
Warum ist es dann notwendig, in der Ausgabe delete aufzurufen? Für ein temporäres Objekt?
Dies ist die 4. Auslegung!))
Warum muss die Ausgabe dann delete aufrufen? Für ein temporäres Objekt?