Perguntas sobre OOP em MQL5 - página 86

 
Igor Makanu:

que faz sentido

mas suspeito que o objetivo é usá-lo com métodos estáticos

Preciso testá-lo, mas não sei como, então eu perguntei


UPD: ontem no Google este tópico, muitas referências ao destruidor privado, também precisam pensar no que ele pode fazer

Os métodos estáticos não têm este ponteiro, e não podem fazer nada com este ponteiro.

O destruidor privado garante que o objeto será deletado pelo próprio objeto. Mas, como disse acima, não é uma boa prática a ser evitada em minha opinião (embora, às vezes, seja bastante útil, e em casos SEVERAIS é aceitável usá-la).

 
Georgiy Merts:

Os métodos estáticos não têm este ponteiro e não podem fazer nada com este ponteiro.

Posso ter entendido mal sua mensagem, mas estou ciente de que o método não tem um ponteiro para isso, apenas a própria instância do objeto tem, eu escrevi porque a partir dos campos de classe do método estático estão disponíveis, e muito provavelmente você pode manipular com a exclusão

o objetivo é olhar para este projeto, eu nunca o experimentei, e não é uma forma comum


Sergey Dzyublik:

1) A partir de métodos estáticos, o acesso a isto é proibido.
Onde está "apagar e isto";" - https://stackoverflow.com/questions/447379/what-is-the-use-of-delete-this

2) O destruidor privado proíbe a criação de um objeto na pilha, mas você ainda pode criá-lo através do novo operador, desta vez na pilha:

Aqui está outro uso de apagar &isto.

obrigado, eu vou verificar, é útil




ocupados, todos em reparos, vou perguntar mais tarde... logo no topo da minha cabeça, o que acontece se uma classe base tiver um método com

delete &this;

e a partir de uma chamada de classe derivada um método com a classe base removida.... sem objetivo prático, mas por enquanto eu quero descobrir

 
Igor Makanu:

Posso ter entendido mal sua mensagem, mas estou ciente de que o método não tem este ponteiro, apenas a instância do objeto em si tem, eu o escrevi porque os campos de classe estão disponíveis a partir do método estático, e muito provavelmente você pode manipular com exclusão

até agora o propósito de olhar para este projeto, eu nunca o experimentei e não é uma forma comum


Obrigado, vou dar uma olhada, é útil.




Ocupados, todos em reparos, vou perguntar mais tarde... logo no topo da minha cabeça, o que acontece se uma classe base tiver um método com

e a partir de uma chamada de classe derivada um método com a classe base removida.... sem objetivo prático, mas por enquanto eu quero descobrir

Não se preocupe, você nunca precisará dele.

Você precisa entender o básico do idioma antes de lidar com tais coisas.

 
Koldun Zloy:

Não se preocupe, você nunca precisará dele.

Essa não é uma afirmação correta, se você não expandir seus horizontes, é claro que você não precisará fazê-lo.

Koldun Zloy:

Você precisa entender o básico do idioma antes de lidar com tais coisas.

Eu o faço o máximo que posso, mas em geral resolvo 90+% das tarefas MQL a partir do zero, a maioria delas já está resolvida e é de livre acesso.



sobre a eliminação e isto; ... ... Utilizei uma ordem de classe que monitorou sua abertura e a pedido foi capaz de reabrir a ordem ... ... e muitas outras coisas,

eu criei e excluí este objeto (classe de ordem) de outra classe, talvez ache mais conveniente usardelete &isto;...

 

Será que isto é uma falha ou uma característica?

Existe uma estrutura dentro da instância de classe.

Coloco um ponto para ver o conteúdo da estrutura.
Mas ele só é exibido se eu colocar colchetes.
Embora a estrutura esteja em uma única instância.

o problema é resolvido se a classe não for um elemento de matriz.




e o próprio código para "bisbilhotar".

class ABC
{   
   public:         
           struct ST
           {    
              int r;
              int U;
                  ST() {r=0; U=0;}           
           };
           ST st;
};
ABC abc[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {

abc[0].st.r;

   return(INIT_SUCCEEDED);
  }
 
Pavel Verveyko:

Será que isto é uma falha ou uma característica?

Existe uma estrutura dentro da instância de classe.

Coloco um ponto para ver o conteúdo da estrutura.
Mas ele só é exibido se eu colocar colchetes.
Embora a estrutura esteja em uma única instância.

o problema é resolvido se a classe não for um elemento de matriz.




e o próprio código para "bisbilhotar".

isto pode estar certo :-)

 
Maxim Kuznetsov:

isso provavelmente está certo :-)

talvez) mas isso não muda o ponto sobre a ponta da ferramenta)

 
Pavel Verveyko:

Será que isto é uma falha ou uma característica?

Existe uma estrutura dentro da instância de classe.

Coloco um ponto para ver o conteúdo da estrutura.
Mas ele só é exibido se eu colocar colchetes.
Embora a estrutura esteja em uma única instância.

o problema é resolvido se a classe não for um elemento de matriz.




e o próprio código para "poking".

Outro bug do editor(
 

https://www.ibm.com/support/knowledgecenter/ru/ssw_aix_72/performance/coding_style_best_perf.html

Везде, где это возможно, заменяйте глобальные переменные локальными.

É preciso mais comandos para acessar variáveis globais do que para acessar variáveis locais. Além disso, a menos que explicitamente declarado em contrário, o compilador assume que a chamada sub-rotina pode alterar os valores de todas as variáveis globais. Assim, depois que a sub-rotina é chamada, os valores de todas as variáveis globais são carregados na memória repetidamente, o que leva à degradação do desempenho.


Se você precisar acessar uma variável global (que não é compartilhada por este tópico e outros), copie seu valor em uma variável local e trabalhe com a cópia.

A utilização de uma cópia local proporciona um ganho de desempenho, exceto quando a variável global é acessada apenas uma vez.


Se no meu exemplo:

class CEA
{
private:
   double            _Ask, _Bid;
public:
   void              onTick(const MqlTick &tick);
};
//+------------------------------------------------------------------+
void CEA::onTick(const MqlTick &tick)
{
   _Ask = tick.ask;
   _Bid = tick.bid;
}

no método onTick() copiar os valores de Ask e Bid e usar _Ask, _Bid (comércio virtual) no resto dos métodos

será como trabalhar com variáveis globais?

ZS: como opção, é claro que posso passar por referência & stick em todos os métodos, mas novamente, questiono o que é mais eficaz

 
Igor Makanu:

https://www.ibm.com/support/knowledgecenter/ru/ssw_aix_72/performance/coding_style_best_perf.html


se no meu exemplo:

copiar os valores asc e bid no método onTick() e usar _Ask, _Bid (comércio virtual) no resto dos métodos

será como trabalhar com variáveis globais?

ZS: como opção, posso, naturalmente, passar por referência e me ater a todos os métodos, mas mais uma vez, questiono o que é mais eficaz

Igor Makanu:

https://www.ibm.com/support/knowledgecenter/ru/ssw_aix_72/performance/coding_style_best_perf.html


Se no meu exemplo:

no método onTick() copiar os valores de asc e bid e usar _Ask, _Bid (comércio virtual) em outros métodos

será como trabalhar com variáveis globais?

ZS: como opção, é claro que posso passar por referência & stick em todos os métodos, mas novamente, perguntas, o que é mais eficaz

Pergunta. Qual é o objetivo do bode? Se em um método, em uma classe, em um cavalo esférico, sim em um vácuo físico (bem eu estou bêbado)))), então sim, faz sentido. E se em um projeto real, seja uma classe a nível global, ou uma classe que lide com todo esse tricomudin (desculpe pelo bourbon))))) extra no início do manipulador, e, peça diretamente a partir dele em qualquer lugar)))
Razão: