Questions sur la POO dans MQL5 - page 5

 
 
Vladimir Simakov:
Allez ! Je l'utilise tout le temps.

Où ? Dans quel lieu et comment ?

Modérateurs, désolé de répéter la question. Je veux vraiment obtenir une réponse à cette question.

 
Artyom Trishkin:

Pourquoi réaffecter intentionnellement un pointeur passé à une fonction? Bien sûr, il y aura une fuite. Mais il ne s'agit pas d'une "fuite classique", mais d'une erreur classique de travail avec un pointeur sur un objet.

Il n'est pas nécessaire de créer un nouvel objet ici, mais de manipuler l'objet externe dont le pointeur a été passé dans la fonction.

Ce n'est pas moi. Il est tiré du code de quelqu'un d'autre sur ce fil. C'est pris comme exemple.
 
Dmitry Fedoseev:

Où ? Dans quel lieu et comment ?

Modérateurs, désolé de répéter la question. Je veux vraiment obtenir une réponse à cette question.

Soyez patient. Je vais rentrer à la maison et le poster.
 
Dmitry Fedoseev:

Où ? Dans quel lieu et comment ?

Modérateurs, désolé de répéter la question. Je veux vraiment obtenir une réponse à cette question.

Si je comprends bien la question, nous déclarons la classe comme un objet en utilisant new.
Utilisez ensuite un point pour appeler les méthodes publiques de la classe à travers l'objet créé.
Après l'exécution de toutes les méthodes appelées, nous vidons la mémoire en supprimant l'objet créé delete.

 
Roman:

Si j'ai bien compris la question, nous déclarons la classe comme un objet en utilisant new.
Ensuite, nous appelons les méthodes publiques de la classe à travers l'objet créé, en utilisant un point.
Après l'exécution de toutes les méthodes appelées, nous vidons la mémoire en supprimant l'objet créé delete.

Non. Au début, je pensais qu'il s'agissait d'un paramètre de fonction comme celui-ci - objet mais pas par référence, mais il y a un point-virgule à la fin. S'il s'agit d'une création d'objet normale lors de la déclaration, alors pourquoi est-elle entre parenthèses ? Pour l'instant, cela reste le mystère du siècle.

 
Dmitry Fedoseev:

Non. Au début, je pensais qu'il s'agissait d'un paramètre de fonction comme celui-ci - objet mais pas par référence, mais il y a un point-virgule à la fin. S'il s'agit d'une création d'objet normale lors de la déclaration, alors pourquoi est-elle entre parenthèses ? Pour l'instant, cela reste le mystère du siècle.

Entre parenthèses - parce que c'est une note sur le texte))))
 
Artyom Trishkin:

Et pourquoi avoir délibérément réassigné un pointeur passé à une fonction? Bien sûr, il y aura une fuite. Mais il ne s'agit pas d'une "fuite classique", mais d'une erreur classique de manipulation d'un pointeur sur un objet.

Il n'est pas nécessaire de créer un nouvel objet ici, mais de manipuler l'objet externe dont le pointeur a été transmis à la fonction.

Il ne s'agit pas de mon exemple, mais de l'implémentation des pointeurs eux-mêmes dans MQL - si vous n'avez pas besoin de les déréférencer (et que le pointeur peut être assigné à une instance de l'objet !), si au lieu de passer un pointeur, vous pouvez passer une référence à l'objethttps://www.mql5.com/ru/forum/1111/page2471#comment_11796665.

ici nous n'avons pas d'information détaillée sur où et quand (CObj& obj) est apparu (& n'est pas une opération de déréférencement de pointeur, mais l'acquisition d'un pointeur GetPointer() )

Ok, je ne veux pas gaspiller d'informations... Je me suis déjà dit, et je le répète encore une fois sur ce forum - MQL n'est pas C++, c'est comme ça qu'il est implémenté - eh bien, je n'ai pas d'autres options

 
Igor Makanu:

Il ne s'agit pas de mon exemple, mais de l'implémentation des pointeurs eux-mêmes dans MQL - si vous n'avez pas besoin de les déréférencer (et que le pointeur peut être assigné à une instance de l'objet !), si au lieu de passer un pointeur, vous pouvez passer une référence à l'objet https://www.mql5.com/ru/forum/1111/page2471#comment_11796665.

ici nous n'avons pas d'information détaillée sur où et quand (CObj& obj) est apparu (& n'est pas une opération de déréférencement de pointeur, mais l'acquisition d'un pointeur GetPointer() )

Ok, je ne veux pas gaspiller d'informations... Je me suis déjà dit, et je le répète encore une fois sur ce forum - MQL n'est pas C++, c'est comme ça qu'il est implémenté - eh bien, je n'ai pas d'autres options

Vous êtes dramatique, il n'y a pas de complexités et de confusions.

 
Vladimir Simakov:
Les parenthèses sont dues au fait qu'il s'agit d'une note sur le texte)))).

Alors voilà.

Comme ça :

void z(CObj * o){
}

Pas seulement peut, mais mieux, car vous pouvez l'appeler comme ça :

CObj obj;
z(GetPointer(obj));

Si vous passez un pointeur par référence, vous avez besoin d'une autre variable pour le pointeur.

***

Et si un pointeur doit être transmis à une fonction pour créer un objet dans la fonction, voici comment cela fonctionne :

class CObj{
   public:
   int f(){
      return(33);
   }
};

CObj * obj;

void OnStart(){
  z(obj);
  delete(obj);
}

void z(CObj & o){
   o = new CObj();
}
C'est en gros tout ce que vous vouliez savoir sur la POO, mais que vous n'osiez pas demander))).
Raison: