Es gibt keine Zeiger hier) Es ist ein Handle für die Klasse, und die Arbeit mit ihm ist ähnlich wie die Arbeit mit einem Zeiger, aber das ist, wo die gemeinsame Basis endet.
Mein neugieriger Geist und meine ungezogenen Hände haben mich zwei Tage und zwei Nächte lang verfolgt
Ich habe versucht, dynamisch erstellte Objekt aus dem Geltungsbereich zu entfernen - in der Funktion, tastend Methode, aber schließlich habe ich die Lösung:
Zwei Tage und zwei Nächte hielten mich mein wissbegieriger Geist und meine frechen Hände auf Trab
versucht, dynamisch erstellte Objekt aus dem Geltungsbereich zu entfernen - in der Funktion, Bauchgefühl-Methode, aber schließlich bekam die Lösung:
das es löscht, aber ich kann es nicht so herausfinden.... und ich konnte keine ähnlichen Funktionssignaturen für die Übergabe von Zeigern in der Hilfe oder sat finden
Was meinen Sie damit, dass es außerhalb des Geltungsbereichs liegt? Sie haben es an eine Funktion übergeben, also ist es dort sichtbar.)
s.s.void deleteCTest(CTest* &t) ohne das & sollte auch funktionieren, oder?
Um sie wirklich außerhalb des Bereichs, in dem sie erstellt wurde, und möglicherweise automatisch zu entfernen, müssen Sie ... Pssst... bevor es jemand hört... Pattern Factory... schneller lesen und löschen...
s.w.void deleteCTest(CTest* &t) ohne dies & sollte auch funktionieren, oder nicht?
Schau es dir an, du wirst etwas Neues lernen ;)
Ich habe schon oft geschrieben, dass die MQL-Zeiger eine sehr lehrreiche Sache sind ))))
Vladimir Simakov: Wenn Sie koscher wollen, noch nicht, aber wenn ja:
Wenn Sie einen Zeiger verwenden wollen, muss die Klasse einen Kopierkonstruktor haben.
Nochmals, ich muss nachdenken
Ich habe den Verdacht, dass GetPointer() einige Tricks anwenden kann... aber es ist keine Tatsache.... Diese "Sprünge durch Raum und Zeit" - über Zeiger und implizite Dereferenzierung in MQL - sind für mich nicht mehr nachvollziehbar! (((
Ich habe Ihnen immer wieder gesagt, dass Zeiger in MQL sehr lehrreich sind ))))
Nochmals, ich muss nachdenken
Ich habe den Verdacht, dass GetPointer() einige Tricks anwenden kann... aber es ist keine Tatsache.... Diese "Sprünge durch Raum und Zeit" - über Zeiger und implizite Dereferenzierung in MQL - sind für mich nicht nachvollziehbar! (((
Es ist alles in Ordnung hier)))) Schalten Sie einfach die Schärfe ab, hier gibt es nicht einmal einen Hauch davon))))
kein vollständiges Beispiel, ich bin heute darauf gestoßen.
es wird nicht so funktionieren ohne &
Sicher wird es das. Sie übergeben einen Zeiger als Wert, daher wird eine Kopie des Zeigers erstellt. Sie verwenden es, um das Objekt festzunageln und ein neues Objekt für den Zeiger zu erstellen, der in der Funktion erstellt wurde. Dies ist C++, willkommen))))
kein vollständiges Beispiel, habe ich heute gefunden
es wird nicht ohne & funktionieren
Meiner Meinung nach hat das nichts mit Referenzen zu tun, sondern nur mit der Tatsache, dass das Funktionsargument per Zeiger übergeben werden muss, wenn der Wert nach der Ausführung der Funktion gespeichert werden soll. Das Gleiche passiert zum Beispiel mit einem Datei- oder Indikator-Handle, die keine Referenzen sind.
Das war schon immer der Standard in C++, auch wenn ich mich nicht mehr genau daran erinnern kann.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Es gibt keine Zeiger hier) Es ist ein Handle für die Klasse, und die Arbeit mit ihm ist ähnlich wie die Arbeit mit einem Zeiger, aber das ist, wo die gemeinsame Basis endet.
Mein neugieriger Geist und meine ungezogenen Hände haben mich zwei Tage und zwei Nächte lang verfolgt
Ich habe versucht, dynamisch erstellte Objekt aus dem Geltungsbereich zu entfernen - in der Funktion, tastend Methode, aber schließlich habe ich die Lösung:
das es löscht, aber ich kann es nicht so herausfinden.... und ich habe keine ähnlichen Funktionssignaturen für die Übergabe der Zeiger gefunden
Hier ist eine weitere Frage:
Wie kann ich als Ergebnis einer Funktion einen Zeiger auf ein Objekt per Referenz zurückgeben?
Ich möchte etwas in dieser Art machen:
CTest ret_CTest() { CTest *result = new CTest; return(result); }es ist möglich, CTest * ohne Probleme zurückzugeben, aber wie ich schrieb ret_CTest() - es gibt einen Fehler
Zwei Tage und zwei Nächte hielten mich mein wissbegieriger Geist und meine frechen Hände auf Trab
versucht, dynamisch erstellte Objekt aus dem Geltungsbereich zu entfernen - in der Funktion, Bauchgefühl-Methode, aber schließlich bekam die Lösung:
das es löscht, aber ich kann es nicht so herausfinden.... und ich konnte keine ähnlichen Funktionssignaturen für die Übergabe von Zeigern in der Hilfe oder sat finden
Was meinen Sie damit, dass es außerhalb des Geltungsbereichs liegt? Sie haben es an eine Funktion übergeben, also ist es dort sichtbar.)
s.s.void deleteCTest(CTest* &t) ohne das & sollte auch funktionieren, oder?
Um sie wirklich außerhalb des Bereichs, in dem sie erstellt wurde, und möglicherweise automatisch zu entfernen, müssen Sie ... Pssst... bevor es jemand hört... Pattern Factory... schneller lesen und löschen...
Igor Makanu:
aber wie kann man als Ergebnis einer Funktion einen Zeiger auf ein Objekt per Referenz zurückgeben?
Sie können CTest * ohne Probleme zurückgeben, aber wie ich schrieb ret_CTest() - es gibt einen FehlerWenn eine Klasse einen Kopierkonstruktor hat, dann sollte sie auch einen Kopierkonstruktor haben.
s.w.void deleteCTest(CTest* &t) ohne dies & sollte auch funktionieren, oder nicht?
Schau es dir an, du wirst etwas Neues lernen ;)
Ich habe schon oft geschrieben, dass die MQL-Zeiger eine sehr lehrreiche Sache sind ))))
Wenn Sie koscher wollen, noch nicht, aber wenn ja:
Wenn Sie einen Zeiger verwenden wollen, muss die Klasse einen Kopierkonstruktor haben.
Nochmals, ich muss nachdenken
Ich habe den Verdacht, dass GetPointer() einige Tricks anwenden kann... aber es ist keine Tatsache.... Diese "Sprünge durch Raum und Zeit" - über Zeiger und implizite Dereferenzierung in MQL - sind für mich nicht mehr nachvollziehbar! (((
Schau es dir an, du wirst eine Menge lernen ;)
Ich habe schon oft geschrieben, dass Zeiger in MQL eine sehr lehrreiche Sache sind ))))
Es löscht Zeiger, kann aber _test keinen neuen Wert zuweisen. Übrigens, MQL hat nichts damit zu tun)))
Schau es dir an, du wirst eine Menge lernen ;)
Ich habe Ihnen immer wieder gesagt, dass Zeiger in MQL sehr lehrreich sind ))))
Nochmals, ich muss nachdenken
Ich habe den Verdacht, dass GetPointer() einige Tricks anwenden kann... aber es ist keine Tatsache.... Diese "Sprünge durch Raum und Zeit" - über Zeiger und implizite Dereferenzierung in MQL - sind für mich nicht nachvollziehbar! (((
Es ist alles in Ordnung hier)))) Schalten Sie einfach die Schärfe ab, hier gibt es nicht einmal einen Hauch davon))))
Schau es dir an, du wirst eine Menge lernen ;)
Ich habe Ihnen immer wieder gesagt, dass Zeiger in MQL sehr lehrreich sind ))))
Ich habe es überprüft. Es löscht gut ohne &)
Ich habe es in MT4 und MT5 versucht und vergleiche )
Gut geprüft. Es löscht perfekt ohne &)
Ich habe es in MT4 und MT5 versucht und vergleiche )
Kein vollständiges Beispiel, ich bin heute darauf gestoßen.
Es wird nicht ohne & funktionieren.
Mir geht es gut hier))) Ich bin nicht auf der Suche nach scharfen Gegenständen, aber ich bin sicher, dass es auch ohne geht &)).
Ich bin nicht auf der Suche nach Sharp, ich bin immer noch im Umgang mit MQL, kann ich fragen, was ich nicht verstehe.
kein vollständiges Beispiel, ich bin heute darauf gestoßen.
es wird nicht so funktionieren ohne &
kein vollständiges Beispiel, habe ich heute gefunden
es wird nicht ohne & funktionieren
Meiner Meinung nach hat das nichts mit Referenzen zu tun, sondern nur mit der Tatsache, dass das Funktionsargument per Zeiger übergeben werden muss, wenn der Wert nach der Ausführung der Funktion gespeichert werden soll. Das Gleiche passiert zum Beispiel mit einem Datei- oder Indikator-Handle, die keine Referenzen sind.
Das war schon immer der Standard in C++, auch wenn ich mich nicht mehr genau daran erinnern kann.