Generische Klassenbibliothek - Bugs, Beschreibung, Fragen, Nutzungsmöglichkeiten und Vorschläge - Seite 25
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
Warum sollte man Sammlungen erstellen und sie in eine kodobase stellen, wenn sie nur für eingebettete Typen gut sind?)
Sie sind auch nicht gut für eingebettete Strukturen.
Sagen Sie mir, vielleicht verstehe ich etwas nicht, aber wenn ich versuche, eine Konstruktion dieser Art zu verwenden:
Ich erhalte eine Fehlermeldung:
Option' - Objekte werden nur per Referenz übergeben ICollection.mqh 14 18
und dann gibt es einen ganzen Stapel von Fehlern...Dies wird nicht funktionieren, durch eine Vorlage Vorlage tun müssen, arbeitete ich auch mit diesem Problem, hier ist ein Test-Beispiel, scheint es richtig zu funktionieren
Klasse CData - Struktur, die wir in der Liste speichern wollen
CDataBase - die Liste selbst
In OnStart() - wir erstellen eine Liste, schreiben Werte in sie und lesen sie dann. Ich überprüfe es 2 Mal, weil ich zuerst irgendwo die Sichtbarkeit einer lokalen Variablen beim Schreiben in die Liste verlor - ich schrieb alles ok, aber wenn ich las, dann bekam ich Nullzeiger und einen Fehler
Es wird nicht auf diese Weise funktionieren, müssen Sie Vorlagen Vorlage verwenden, war ich mit diesem Problem zu tun, habe ich ein Test-Beispiel, es scheint alles richtig zu funktionieren
Klasse CData - die Struktur, die wir in der Liste speichern wollen
CDataBase - die Liste selbst
In OnStart () - erstellen Sie eine Liste, schreiben Sie Werte in sie und lesen Sie sie dann. Ich überprüfe es zweimal, denn zuerst habe ich irgendwo Sichtbarkeit einer lokalen Variablen verloren, wenn ich in die Liste schreibe - ich schrieb alles ok, aber wenn ich las, dann bekam ich Null-Zeiger und einen Fehler
Ihr Code funktioniert, weil CData immer noch eine Klasse und keine Struktur ist. Wenn Sie versuchen, den Generator für Klassen und Strukturen gleichzeitig zu verwenden, werden Sie Probleme bekommen, insbesondere mit dem Löschoperator. Davon habe ich mich durch meine eigenen Experimente mit diesem "Generikum" überzeugt. Der Punkt ist, dass diese "generische" Bibliothek überhaupt keinen Lösch-Operator hat, und wenn man eine neue Klasse zu einer solchen "Sammlung" hinzufügt, gibt es nach dem Beenden des Programms eine Menge verlorener Objekte. D.h. es ist offensichtlich, dass diese Generik ursprünglich nur für primitive Typen geschrieben wurde.
Dieser Code funktioniert für Sie, weil CData eine Klasse und keine Struktur ist. Wenn Sie versuchen, generisch für Klassen und Strukturen gleichzeitig zu verwenden, werden Sie Probleme bekommen, insbesondere mit dem Löschoperator. Davon habe ich mich durch meine eigenen Experimente mit diesem "Generikum" überzeugt. Der Punkt ist, dass diese "generische" Bibliothek überhaupt keinen Lösch-Operator hat, und wenn man eine neue Klasse zu einer solchen "Sammlung" hinzufügt, gibt es nach dem Beenden des Programms eine Menge verlorener Objekte. D.h. Sie sehen, dass diese Generika ursprünglich nur für primitive Typen geschrieben wurden.
Ich habe aufgehört, Strukturen in MQL zu verwenden, die Struktur hat keine Vorteile, aber die ständigen Bugs und Zeitverschwendung bei der Arbeit mit den Strukturen, die sie zur Verfügung stellen - ich lese die alten Admins 'Beiträge mit Fragen über die Strukturen und sie würden im Grunde sagen, verwenden Sie die Klasse statt der Struktur - ich benutze keine Strukturen überhaupt jetzt
SZZ: Das habe ich gefunden, als ich keine Strukturen mehr verwendetehttps://www.mql5.com/ru/forum/6343/page866#comment_7541747
Warum sollte man Sammlungen erstellen und sie in eine kodobase stellen, wenn sie nur für eingebettete Typen geeignet sind?)
Annehmlichkeiten, die zur Standardausstattung gehören. Daher ist es nicht nötig, zu ziehen - jeder Benutzer hat einen.
Ich verwende dies in einer meiner KB-Libs seit langem.
Es wird nicht auf diese Weise funktionieren, müssen Sie Vorlagen Vorlage verwenden, war ich mit diesem Problem zu tun, habe ich ein Test-Beispiel, es scheint alles richtig zu funktionieren
Klasse CData - die Struktur, die wir in der Liste speichern wollen
CDataBase - die Liste selbst
In OnStart () - erstellen Sie eine Liste, schreiben Sie Werte in sie und dann lesen, 2 mal ich es überprüfen, weil zunächst irgendwo verlor ich Sichtbarkeit einer lokalen Variable beim Schreiben in die Liste - ich verwendet, um alles ok zu schreiben, aber wenn ich lesen, dann bekam ich Null-Zeiger lesen und bekam einen Fehler
Nun, zunächst einmal haben Sie Ihren Allokator über eine Liste implementiert und dort Zeiger gespeichert. Und nicht nur das: Sie haben ein Leck beim Zerstören).
Zweitens hätten Sie den Kopierkonstruktor anstelle des Zuweisungsoperators verwenden müssen. Aber das ist alles IMHO)
Und das Wichtigste: Entwickler müssen lediglich Generika finalisieren, Allokatoren einbauen und benutzerdefinierte Objekte unterstützen. C++ hat bereits alles für sie erfunden. Und wir müssen keine Fahrräder erfinden.
Nun, zunächst einmal haben Sie Ihren Allokator über eine Liste implementiert und speichern die Zeiger dort. Und nicht nur das, Sie haben auch undichte Stellen bei der Zerstörung)
Wie haben Sie undichte Stellen entdeckt?
SZZ: Es ist ein Testbeispiel, ich musste herausfinden, wie man mit Listen in MQL arbeitet, also habe ich Tests gemacht.
Und das Wichtigste: Entwickler sollten einfach die Generics beenden, Allokatoren einbauen und benutzerdefinierte Objekte unterstützen. C++ hat bereits alles für sie erfunden. Und wir müssen keine Fahrräder erfinden.
Schreiben Sie es, wenn es so einfach ist.
Wie wurden die Lecks entdeckt?
ZS: Es ist ein Testbeispiel, ich musste herausfinden, wie man mit Listen in MQL arbeitet, also habe ich Tests gemacht.
Sie erstellen Kopien von Objekten in AddValue über new, aber Sie geben sie nicht im Destruktor frei, sondern löschen nur die Zeigerliste.
schreiben, wenn es so einfach ist.
Wenn ich die Zeit und das Bedürfnis habe, werde ich schreiben. Und im Allgemeinen ist es keine gute Idee, eine eigene Lagerfabrik zu gründen, wenn Sie nur ein Lagermodell benötigen.)