Fragen zu OOP in MQL5 - Seite 6

 
Dmitry Fedoseev:

So, das war's.

Zum Beispiel so:

Nicht einmal nur können, sondern besser, weil man es so nennen kann:

Wenn Sie einen Zeiger per Referenz übergeben, benötigen Sie eine weitere Variable für den Zeiger.

***

Und wenn Sie einen Zeiger an eine Funktion übergeben müssen, um ein Objekt in der Funktion zu erstellen, dann funktioniert das auch so:

Das ist im Grunde alles, was Sie über OOP wissen wollten, aber nicht zu fragen wagten)))

Nuh-uh

 
void z(CObj* & o){
   o = new CObj();
}

Und sieh es doch einmal so: Es funktioniert alles.

Wenn Sie also Fragen zu OOP haben, wenden Sie sich bitte an))))

 
Es stellte sich eine klassische Nullzeiger-Dereferenzierung heraus.
 
Vladimir Simakov:

Wenn Sie also Fragen zu OOP haben, wenden Sie sich bitte an))))

Erläutern Sie bitte die Bedeutung der Erstellung eines dynamischen Objekts mit dem Operator new.

Bei der automatischen Erstellung eines Objekts wird ein Klassenobjekt auf dem Stapel erstellt und ist in Bezug auf dieAusführungszeit schneller als ein dynamisches Objekt.
Wenn ein Objekt dynamisch erstellt wird, wird das Klassenobjekt im Speicher (im Heap) erstellt und der Speichermanager des Betriebssystems wird aktiviert, der Prozess ist langsamer.

Hier sind die Fragen:
Wenn die automatische Erstellung schneller ist, warum ist es dann besser, dynamische Objekte zu verwenden?
Explizite Kontrolle der Speicherzuweisung?
Einen möglichen Stapelüberlauf beseitigen?
Und nicht unerwartet einen Gegenstand zu verlieren?
Denn wenn der Stapel überläuft, wird das Objekt automatisch gelöscht?

 
Roman:


Sind Sie es nicht leid, sich mit diesem Thema zu beschäftigen?

 
Artyom Trishkin:

Sind Sie es nicht leid, sich mit diesem Thema zu beschäftigen?

Anpassung der Fragen, um so genau wie möglich zu sein.
Ist daran etwas auszusetzen? Es gibt eine Schaltfläche "Bearbeiten", mit der Sie Ihre Meinung äußern können.

 
Roman:

Erläutern Sie bitte die Bedeutung der Erstellung eines dynamischen Objekts mit dem Operator new.

Bei der automatischen Erstellung eines Objekts wird das Klassenobjekt auf dem Stapel erstellt, was in Bezug auf die Ausführungszeit schneller ist als ein dynamisches Objekt.
Wenn ein Objekt dynamisch erstellt wird, wird das Klassenobjekt im Speicher (im Heap) erstellt und der Speichermanager des Betriebssystems wird aktiviert, der Prozess ist langsamer.

Hier sind die Fragen:
Wenn die automatische Erstellung schneller ist, warum ist es dann besser, dynamische Objekte zu verwenden?
Explizite Kontrolle der Speicherzuweisung?
Einen möglichen Stapelüberlauf beseitigen?
Und nicht unerwartet einen Gegenstand zu verlieren?
Denn wenn der Stapel überläuft, wird das Objekt automatisch gelöscht?

Warum lesen Sie nicht über statischen Speicher, Stack und Heap?
 
Roman:

Erläutern Sie bitte die Bedeutung der Erstellung eines dynamischen Objekts mit dem Operator new.

Ein anschauliches Beispiel für die Verwendung dieser Methode ist, wenn die Art des Objekts nicht im Voraus bekannt ist.

Hier ist ein gutes Beispiel dafür in der Hilfe: https://www.mql5.com/ru/docs/basis/operators/newoperator

Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
  • www.mql5.com
//| Создание фигуры                                                  |
 
Vladimir Simakov:

Nuh-uh

Ja, außer dass alles kompiliert wird und aus irgendeinem Grund funktioniert.

Was für Wunder gibt es denn da... Niemand weiß es, aber das ist auch nicht verwunderlich nach den gestrigen Codebeispielen, die angeblich von irgendwo anders in diesem Thread stammen, aber in Wirklichkeit irgendwo anders fehlen.

***

Oh, und falls Sie nicht vergessen haben, worüber wir ursprünglich gesprochen haben - über die Übergabe eines Zeigers an eine Funktion oder Methode (und über das, was Sie behauptet haben, dass dort angeblich ein Speicherleck auftritt), was genau dort ist, wo & nicht gebraucht wird.


 
Roman:

Erläutern Sie bitte den Zweck der Erstellung eines dynamischen Objekts mit dem Operator new.

Bei der automatischen Erstellung eines Objekts wird das Klassenobjekt auf dem Stack erstellt und ist in Bezug auf die Ausführungszeit schneller als ein dynamisches Objekt.
Bei der dynamischen Erstellung eines Objekts wird ein Klassenobjekt im Speicher (im Heap) unter Einbeziehung des OS-Speichermanagers erstellt; der Prozess ist langsamer.

Hier sind die Fragen:
Wenn die automatische Erstellung schneller ist, warum ist es dann besser, dynamische Objekte zu verwenden?
Explizite Kontrolle der Speicherzuweisung?
Einen möglichen Stapelüberlauf beseitigen?
Und nicht unerwartet einen Gegenstand zu verlieren?
Denn wenn der Stapel überläuft, wird das Objekt automatisch gelöscht?

Wenn die Anzahl der Objekte im Voraus bekannt ist und während der Ausführung des Programms konstant bleibt, ist new nicht erforderlich. In allen anderen Fällen - neu.