Diskussion zum Artikel "Die Reihenfolge der Erstellung und Zerstörung von Objekten in MQL5" - Seite 2

 

شكرا جزيلا

 

m_array[] wurde von der Funktion GetPointer(arrray[i]) kopiert, daher werden sie zum Typ POINTER_AUTOMATIC.

Wir brauchen die Zeile 54 nicht:

 if(CheckPointer(m_array[i])==POINTER_DYNAMIC) delete(m_array[i]);

denn MQL5 löscht POINTER_AUTOMATIC für Sie.

 

Guten Tag!


Ich kann diesen Abschnitt nicht verstehen:

//--- dieser Block wird nicht ausgeführt, wenn execute==false
   if(execute)
     {
      CObjectB objB;
     }
//--- dieser Block wird ausgeführt, wenn execute==false
   if(!execute)
     {
      CObjectC objC;
     }

Am Anfang des Codes ist festgelegt, dass execute = false ist. Die Worte: execute ist gleich false.

Das erste IF: wenn execute wahr ist, sollte der Block ausgeführt werden. Aber im Kommentar steht, dass er NICHT ausgeführt wird, wenn er TRUE ist und zum nächsten weitergeht.

Zweites IF: wenn execute FALSE ist, wird der Block ausgeführt. Aber auch hier sagt der Kommentar, dass der Block ausgeführt wird, wenn er WAHR ist.

Ich nahm an, dass ! - ein Negationssymbol ist.

Wo liegt der Fehler in meiner Argumentation?

 
kashi_ann:

Guten Tag,


ich werde aus dieser Handlung nicht schlau:

Am Anfang des Codes ist festgelegt, dass execute = false ist. Die Worte: execute ist gleich false.

Das erste IF: wenn execute wahr ist, sollte der Block ausgeführt werden. Der Kommentar besagt jedoch, dass er NICHT ausgeführt wird, wenn er wahr ist, und dass zum nächsten Block übergegangen wird.

Das zweite IF: wenn execute gleich FALSE ist, wird der Block ausgeführt. Aber auch hier sagt der Kommentar , dass der Block ausgeführt wird, wenn er wahr ist.

Ich nahm an, dass ! - ein Negationssymbol ist.

Wo liegt der Fehler in meiner Argumentation?

Ich habe Ihre fehlerhafte Einschätzung hervorgehoben. Zum Vergleich: 'falsch' ist falsch, 'wahr' ist wahr.

Und um es noch deutlicher zu machen, habe ich Kommentare hinzugefügt:

//--- dieser Block wird nicht ausgeführt, wenn execute==false
//--- dieser Block wird ausgeführt, wenn execute==true
   if(execute)
     {
      CObjectB objB;
     }
//--- dieser Block wird ausgeführt, wenn execute==false
//--- dieser Block wird nicht ausgeführt, wenn execute==true
   if(!execute)
     {
      CObjectC objC;
     }
 
Vladimir Karputov:

Ihre Fehleinschätzung ist farblich hervorgehoben. Zur Orientierung: "falsch" ist falsch, "wahr" ist wahr.

Und um es klarer zu machen, habe ich Kommentare hinzugefügt:

Also ... die folgenden Einträge...

if(execute = true) и if(execute) - тожественны?
if(execute = false) и if(!execute) - тоже?

richtig?

 
kashi_ann:

Okay. erhalten wir die folgenden Hinweise.

richtig?

Das sind die Grundlagen.

 
Artyom Trishkin:

Das sind die Grundlagen.

Danke!) Die Grundlagen sind das Wichtigste)

Und danke, dass Sie nicht zu faul zum Antworten sind)
 
kashi_ann:

Okay. erhalten wir die folgenden Hinweise.

richtig?

Zufälligerweise ja, aber Sie wollten eindeutig == und nicht = verwenden.

 
Andrey Khatimlianskii:

Zufällig ja, aber Sie wollten eindeutig == und nicht = verwenden.

Nah))))) die Bedeutung und den Unterschied zwischen = und == muss ich noch herausfinden) Ich stehe noch am Anfang meiner Reise).

 
kashi_ann:

Nah)))) die Bedeutung und den Unterschied zwischen = und == muss ich noch herausfinden) Ich stehe noch ganz am Anfang meiner Reise)).

"=" ist ein Zuweisungsoperator und "==" ist ein Vergleichsoperator.