OLP. Problèmes d'application - page 18

 
TheXpert:
Ça n'a pas l'air de se compiler.
Ça marche :/ Essayez-le. Bien sûr, j'ai décrit la conception de manière schématique, mais ma conception similaire compile bien.
 
Yedelkin:

La recherche ne fonctionne pas. Je me répète peut-être, mais la question est la suivante : un objet de classe peut-il se détruire lui-même ? C'est-à-dire que nous obtenons d'abord une référence de l'objet à lui-même dans la classe objet en utilisant le mot réservé this, puis nous appliquons l'opérateur delete au descripteur d'objet (pointeur) correspondant.

Quelque chose comme :

Ou est-il préférable de supprimer un objet "en externe" plutôt qu'en "interne" ?

Je me suis également posé cette question. Je suis arrivé à la conclusion suivante : l'objet peut s'effacer (sans douleur), mais il faut se rappeler que les données de l'objet (variables) n'existeront plus après cela, donc pas d'appel à elles. Mais, à mon avis, c'est un moyen sale, mieux vaut venir de l'extérieur. Et si l'objet se supprime, il ne peut être créé que dans new.
 
220Volt:
Je me suis également interrogé sur cette question. La conclusion est la suivante : l'objet peut s'effacer (sans douleur), mais nous devons nous rappeler qu'après cela, les données de l'objet (variables) n'existeront plus, donc pas d'appels à celles-ci. Mais, à mon avis, c'est une méthode désordonnée, meilleure à l'extérieur.
Oui, je l'utilise depuis un an maintenant :) C'est très pratique lorsque l'objet n'est plus nécessaire. Je ne comprends pas pourquoi vous considérez cette méthode comme "sale" ?
 
Yedelkin:

Commencez peut-être par lire la documentation du langage avec lequel vous avez l'intention de travailler, et voyez les définitions utilisées pour les besoins de ce langage de programmation ?

Respectueusement.

Vous pensez dans la bonne direction.

 

Ce code ne compile pas

class CCC
{
   public:
      datetime start;                      //Сохраняем время создания объекта класса ССС
      CCC(void) : start(TimeCurrent()) {};  //Функция TimeCurrent() указана без символа "точка с запятой"
     ~CCC(void)                      {}; 
}
  
void OnTick()
{
   CCC ccc;
}

C'est parce que le ; de la ligne 7 est manquant, alors que les lignes 6 et 5 n'en ont pas besoin.

 
kazakov.v:

Vous pensez dans la bonne direction.

J'en déduis que vous ne lisez pas beaucoup la documentation du langage :)
 
TheXpert:

Ce code ne compile pas

C'est parce que le ; de la ligne 7 est manquant, alors que les lignes 6 et 5 n'en ont pas besoin.

C'est-à-dire que le problème commence lors de la création d'un objet de classe ? OK, merci, je vais vérifier maintenant.
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
  • www.mql5.com
Основы языка / Операторы / Оператор создания объекта new - Документация по MQL5
 
TheXpert:
Ça n'a pas l'air de se compiler.
Il compilera (enfin, je ne suis pas pointilleux sur les points-virgules ;-) ).
 
marketeer:
Il compile (enfin, je ne suis pas pointilleux sur les points-virgules ;-) ).

L'auteur de la question a donc exactement le même problème avec eux.

En général, ce sont des broutilles...

 
TheXpert:

Ce code ne compile pas

C'est parce que le ; de la ligne 7 est manquant, alors que les lignes 6 et 5 n'en ont pas besoin.

Étrange, tout compile dans mon code même après vos lignes supplémentaires avec OnTick(). Ce n'est qu'après la déclaration de la classe CCC que vous devez mettre un point-virgule. Comme vous l'avez écrit, - vous devez mettre un point-virgule à la 7ème ligne.