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
1) Ich dachte, es gäbe hier einen Fehler:
Abschnitt: Parameterübergabe an den Konstruktor"Die Funktion Init() wird im Abschnitt private Abschnitt, um sicherzustellen, dass die Klasse reinitialisiert werden kann."
möglich:
Init()-Funktion wird in den öffentlichen Abschnitt, um die Möglichkeit der Reinitialisierung der Klasse zu gewährleisten.
2) Bitte geben Sie ein Beispiel für die Verwendung der Funktion"Erstellen eines Arrays mit Klasseninstanzen (Objekten)" für den Abschnitt "Objektarray". Leider kann ich nicht herausfinden, "wofür dies verwendet wird".
3) Im Abschnitt "More about encapsulation (private, protected, public)" wird die Basisklasse->Klassennachkomme nur am Rande erwähnt. Vielleicht sollte dieses Datum(class Class: public CBase) am Anfang des Abschnitts erklärt werden, denn ich habe es erst später bemerkt.
4) nicht gefunden:Abb.6. Die Sichtbarkeit der "Extra"-Funktion (roter Pfeil) wird durch den Typ des Zeigers bestimmt, mit dem die Klasse geladen wird. Dieses Beispiel ist im Anhang in der Datei OOP_sDefaultVirtual_1.mq5 zu finden.
5) Ich habe keinen klaren Hinweis darauf gefunden, was eine Bibliothek ist. Offenbar eine Möglichkeit, die Klasse(n) von Funktionen zu speichern? d.h. ähnlich wie die Include-Datei, nur dass die Include-Datei als Quelle und die Bibliothek als kompilierte DLL gespeichert wird?
Herzlichen Dank für den Artikel! Ich war besonders erfreut über die konsistente Darstellung des Materials.
1) Ich dachte, es gäbe hier einen Fehler:
Abschnitt: Parameterübergabe an den Konstruktor"Die Funktion Init() wird im Abschnitt private Abschnitt, um sicherzustellen, dass die Klasse reinitialisiert werden kann."
möglich:
Init()-Funktion wird in den öffentlichen Abschnitt, um die Möglichkeit der Reinitialisierung der Klasse zu gewährleisten.
2) Bitte geben Sie ein Beispiel für die Verwendung der Funktion"Erstellen eines Arrays mit Klasseninstanzen (Objekten)" für den Abschnitt "Objektarray". Leider kann ich nicht herausfinden, "wofür dies verwendet wird".
3) Im Abschnitt "More about encapsulation (private, protected, public)" wird die Basisklasse->Klassennachkomme nur am Rande erwähnt. Vielleicht sollte dieses Datum(class Class: public CBase) am Anfang des Abschnitts erklärt werden, denn ich habe es erst später bemerkt.
4) nicht gefunden:Abb.6. Die Sichtbarkeit der "Extra"-Funktion (roter Pfeil) wird durch den Typ des Zeigers bestimmt, mit dem die Klasse geladen wird. Dieses Beispiel ist im Anhang in der Datei OOP_sDefaultVirtual_1.mq5 zu finden.
5) Ich habe keinen klaren Hinweis darauf gefunden, was eine Bibliothek ist. Offenbar eine Möglichkeit, die Klasse(n) von Funktionen zu speichern? d.h. ähnlich wie die Include-Datei, nur dass die Include-Datei als Quelle und die Bibliothek als kompilierte DLL gespeichert wird?
Herzlichen Dank für den Artikel! Ich war besonders erfreut über die konsistente Darstellung des Materials.
1. Ja.
2. Es gibt ein Beispiel im Abschnitt "Array of objects", eigentlich ist der ganze Abschnitt ein Beispiel mit einer Beschreibung.
3. Es wird im Abschnitt "Verwendung von OOP, um die Logik des Programmablaufs zu ändern" betrachtet.
4. Die Worte "Dieses Beispiel befindet sich im Anhang in der Datei..." bedeutet, dass die Datei ein Beispiel für den in der Abschnittsüberschrift angegebenen Abschnitt enthält. Das bedeutet nicht, dass die Beispiele alles wiederholen, was in dem Artikel beschrieben wird. Diese Beispiele gibt es vielleicht gar nicht, alles ist im Artikel beschrieben. Aber die Beispiele sind da, Sie können sie als Grundlage nehmen und experimentieren. Der Artikel ist primär, die Beispiele sind sekundär.
5. Уже давно указано: http://ru.wikipedia.org/wiki/%C1%E8%E1%EB%E8%EE%F2%E5%EA%E0_(%EF%F0%EE%E3%F0%E0%EC%EC%E8%F0%EE%E2%E0%ED%E8%E5)
Sehr interessanter Artikel, der in einer kompetenten, "zugänglichen" Sprache geschrieben ist.
Vielen Dank an den Autor.
Ich habe zwei Beispiele für Code, die auf diesem Artikel basieren/kopiert wurden. Beide erstellen ein Array von Zeigern auf eine Klasse und löschen sie beim Beenden. Eines wird jedoch mit einem Speicherleck beendet, das andere ohne ein Speicherleck. Der einzige Unterschied besteht darin, dass im zweiten Beispiel der "Alert" im Destruktor auskommentiert ist. Wenn der Alert im Destruktor entfernt wird, entsteht ein Speicherleck. Das ist sehr seltsam. Kann mir das jemand erklären? Bitte helfen Sie mir, das macht mich wahnsinnig.
Am Ende der Code-Beispiele aus diesem Artikel habe ich ein extrem einfaches Code-Beispiel eingefügt, das ich geschrieben habe und das ebenfalls ein Speicherleck hat. ???? Auch an diesem letzten Code-Beispiel ist nichts kompliziert...
Dieser Code funktioniert ohne ein Speicherleck:
Meldungen aus dem Expertenprotokoll, beachten Sie, dass kein Speicherleck vorliegt:
PI 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 0
KP 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destruktor 1
JG 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destruktor 2
DE 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destruktor 3
LF 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destruktor 4
OM 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destruktor 5
FD 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destruktor 6
IK 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destruktor 7
HS 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Zerstörer 8
CJ 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destruktor 9
Dieser Code beendet sich MIT einem Speicherleck!!!! Warum????????? Der einzige Unterschied ist das Auskommentieren des 'Alert' im Destruktor...
Meldungen aus dem Expertenprotokoll, beachten Sie den ausgelaufenen Speicher:
FM 1 OOP_sConstDestr_2 (EURUSD,M1) 13:51:19 10 nicht gelöschte Objekte übrig
EG 1 OOP_sConstDestr_2 (EURUSD,M1) 13:51:19 10 Objekte vom Typ CName übrig
GO 1 OOP_sConstDestr_2 (EURUSD,M1) 13:51:19 200 Bytes an ausgelaufenem Speicher
Letztes Beispiel, mein Code, sehr einfach, aber mit einem Speicherleck beendet....
Meldungen aus dem Expertenprotokoll, beachten Sie den ausgelaufenen Speicher:
MR 0 tester (EURUSD,M1) 14:07:23 Last Error- 0 Aktuelle Zeit: 2013.02.06 23:07:23
FL 1 tester (EURUSD,M1) 14:07:23 10 nicht gelöschte Objekte übrig
KN 1 tester (EURUSD,M1) 14:07:23 10 Objekte vom Typ CCandleStick übrig
JS 1 tester (EURUSD,M1) 14:07:23 160 Bytes an ausgelaufenem Speicher
Ich habe zwei Beispiele...
Ich habe alle drei Varaints überprüft. Alle drei sind identisch. Alle sind normal. Keine gibt Lecks. In diesen Beispielen kann es nicht sein - wir haben das Array, in jedem Element des Arrays haben Instanz, beim Beenden löschen wir alle Objekte. Objekte erstellen keine Kopien von sich selbst, können Sie nicht verpassen, um samething löschen. Wenn ein Objekt eine Kopie von sich selbst erstellt, dann können wir Schwierigkeiten mit dem Löschen haben, sehr leicht etwas zu verpassen. Zeigen Sie Varianten, die wirklich undicht sind.
Verwenden Sie die SRC-Schaltfläche, um den Code einzufügen (besser - Dateien anhängen).
Sorry für mein Englisch:)
Ich habe alle drei Varaints überprüft. Alle drei sind identisch. Alle sind normal. Keine gibt Lecks. In diesen Beispielen kann es nicht sein - wir haben das Array, in jedem Element des Arrays haben Instanz, beim Beenden löschen wir alle Objekte. Objekte erstellen keine Kopien von sich selbst, können Sie nicht verpassen, um samething löschen. Wenn ein Objekt eine Kopie von sich selbst erstellt, dann können wir Schwierigkeiten mit dem Löschen haben, sehr leicht etwas zu verpassen. Zeigen Sie Varianten, die wirklich undicht sind.
Verwenden Sie die SRC-Schaltfläche, um den Code einzufügen (besser - Dateien anhängen).
Sorry für mein Englisch:)
Vielen Dank, dass Sie sich die Zeit genommen haben, zu antworten. Ich bin nicht sicher, ob Sie meine Folgefrage gesehen haben. Sie stand in einem separaten Kommentar, der wahrscheinlich gelöscht wurde, weil ich mich in diesem Forum nicht sehr gut auskenne. Ich habe jedoch versucht, alle drei Beispiele auf einem älteren Computer mit einer älteren Version von MetaTrader auszuführen. In der älteren Version schienen alle 3 gut zu funktionieren. Es wurde kein Fehler im Expertenprotokoll "Speicherleck" generiert, ich glaube, es war Build 560?Ich glaube, es war Build 560. Ich kann mich nicht erinnern, und ich habe den 560er auf den neuen Build 756 aktualisiert. Nach dem neuen Build habe ich die gleichen Probleme mit dem Speicherleck. Ist es möglich, dass der alte Build die Probleme mit dem Speicherleck nicht gemeldet hat, weil es keine Funktion war? Welchen Build verwenden Sie? Nochmals vielen Dank.