MQL5 Le compilateur ne fait pas la distinction entre une classe et un pointeur vers celle-ci - page 4
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
qu'ils sont équivalents
qu'ils sont équivalents.
Oubliez complètement cette attribution.
Oubliez complètement cette mission.
Ce n'est donc pas moi qui devrais oublier, c'est le compilateur qui ne devrait pas vous permettre de l'écrire de cette façon.
Et en ce moment, non seulement il compile, mais il fonctionne sans erreur !
Ce n'est donc pas moi qui dois oublier, c'est le compilateur qui ne devrait pas permettre qu' il soit écrit de cette façon.
Et en ce moment, non seulement il compile, mais il fonctionne sans erreur !
Le compilateur le permet parce que vous le pouvez, si vous savez ce que vous faites.
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(); }
Exécutez et voyez combien de fois et quand le constructeur et le destructeur sont appelés.
m_A[0]=a ; dans ce cas, il est égal à : m_A[0].iValue=a.iValue ;
new A(), dans ce cas, crée un nouvel objet, appelons-le temp et ce qui suit se produit : m_A[1].iValue=temp.iValue ;
Exécutez et voyez combien de fois et quand le constructeur et le destructeur sont appelés.
m_A[0]=a ; dans ce cas, il est égal à : m_A[0].iValue=a.iValue ;
La deuxième ligne de cet exemple est incorrecte
Vous ne pouvez pas enregistrer un pointeur dans un objet. Le compilateur ne le remarque tout simplement pas.
La deuxième ligne de cet exemple n'est pas correcte
Vous ne pouvez pas enregistrer un pointeur dans un objet. Et le compilateur ne le remarque pas.
Exécutez et voyez combien de fois et quand le constructeur et le destructeur sont appelés.
m_A[0]=a ; dans ce cas, il est égal à : m_A[0].iValue=a.iValue ;
new A(), dans ce cas, crée un nouvel objet, appelons-le temp et ce qui suit se produit : m_A[1].iValue=temp.iValue ;
Ce doit être le constructeur 3, le destructeur 2. Le reste est correct.
et il se passe ce qui suit : m_A[1].iValue=temp.iValue ;
C'est la 4ème interprétation !))
Alors pourquoi est-il nécessaire d'appeler delete dans la sortie ? Pour un objet temporaire ?
C'est la 4ème interprétation !))
Alors pourquoi la sortie doit-elle appeler delete ? Pour un objet temporaire ?