MQL5 Il compilatore non distingue tra una classe e un puntatore ad essa - pagina 4
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
che sono equivalenti
che sono equivalenti.
Lasciate perdere del tutto questa attribuzione.
Dimentica del tutto questo incarico.
Quindi non sono io che dovrei dimenticare, è il compilatore che non dovrebbe permetterti di scriverlo in quel modo.
E al momento non solo compila ma funziona senza errori!
Quindi non sono io che devo dimenticare, è il compilatore che non dovrebbe permettere che sia scritto in quel modo.
E al momento non solo compila ma funziona senza errori!
Il compilatore lo permette perché si può, se si sa cosa si sta facendo.
class A { public: int iValue; A(){Print("++");} ~A(){Print("--");} }; //...................... A m_A[2]; void OnStart() { A a; m_A[0] =a; m_A[1] = new A(); }
Esegui e vedi quante volte e quando vengono chiamati il costruttore e il distruttore.
m_A[0]=a; in questo caso è uguale a: m_A[0].iValue=a.iValue;
new A(), in questo caso, crea un nuovo oggetto, chiamiamolo temp e succede quanto segue: m_A[1].iValue=temp.iValue;
Esegui e vedi quante volte e quando vengono chiamati il costruttore e il distruttore.
m_A[0]=a; in questo caso è uguale a: m_A[0].iValue=a.iValue;
La seconda linea in questo esempio non è corretta
Non si può salvare un puntatore in un oggetto. Il compilatore semplicemente non lo nota.
La seconda linea in questo esempio non è corretta
Non si può salvare un puntatore in un oggetto. E il compilatore non lo nota.
Esegui e vedi quante volte e quando vengono chiamati il costruttore e il distruttore.
m_A[0]=a; in questo caso è uguale a: m_A[0].iValue=a.iValue;
new A(), in questo caso, crea un nuovo oggetto, chiamiamolo temp e succede quanto segue: m_A[1].iValue=temp.iValue;
Questo deve essere il costruttore 3, il distruttore 2. Il resto è corretto.
e succede quanto segue: m_A[1].iValue=temp.iValue;
Questa è la quarta interpretazione!))
Allora perché è necessario chiamare la cancellazione nell'output? Per un oggetto temporaneo?
Questa è la quarta interpretazione!))
Allora perché l'output deve chiamare la cancellazione? Per un oggetto temporaneo?