Perguntas sobre OOP em MQL5 - página 73

 
Igor Makanu:

Baixando-se ao nível apropriado de comunicação: minha pergunta é sobre o tema do fio? Por que você veio aqui com suas fotos da Internet? Você sabe a resposta? - Não, sentar e calar a boca ;)

Primeiro, não me cutucem, e segundo, não reajam de forma tão violenta à verdade.
Tenho que ser honesto com você, tenho a impressão de que você não está muito longe de seu interlocutor hoje:

Qualquer pergunta de iniciantes em MQL4 e MQL5, ajuda e discussão de algoritmos e códigos

Igor Makanu, 2020.06.07 13:46

Olá a todos. Por favor, ajude-me a inserir uma variável String no meu código. Graças a

você poderia responder sua própria pergunta?
ou você cortou um pedaço de código em algum lugar e não pode usá-lo? e você tem que adivinhar o que está acontecendo pelo menos)

mas eu acho que essa não é a resposta com essa abordagem

 

um moderador notoriamente gentil prometeu bani-lo por ter provocado uma resposta verbal :-)

esperando...

 
Alguns sabem mais, outros sabem menos. O fórum é para comunicação e perguntas e respostas.
Não há vergonha em fazer uma pergunta para enriquecer o conhecimento. É embaraçoso comportar-se de maneira condescendente com os questionadores - este é o nível de um estudante que passou para o próximo curso e está transmitindo "conhecimento sagrado através do lábio". Um zanyness total em geral...
 
Maxim Kuznetsov:

um moderador notoriamente gentil prometeu bani-lo por ter provocado uma resposta verbal :-)

esperar por ele...

É difícil me irritar, e usei todas as palavras de maldição no exército, não há nada sem elas ))))

 
Maxim Kuznetsov:

um certo notório bom moderador prometeu bani-lo por ter provocado uma resposta verbal :-)

esperando...

Não, Maxim, não é assim. Por favor, releia-a com a mente aberta.
 
#include <JSON\json.mqh>

JSONObject * getJSONObject(const string json)
{
   JSONValue *jv =((JSONParser *)(new JSONParser())).parse(json);   //1
   if (jv != NULL && jv.isObject()) return((JSONObject *)jv);       //2
   Print(__FUNCSIG__ + "parser error, json = ",json);
   delete jv;                                                       //3
   return(NULL);
}
void OnStart()
{
   JSONObject *jobj = getJSONObject("{\"ObjType\":2,\"m_period\":1}");
   if(jobj!=NULL) Print("m_period = ", jobj.getInt("m_period"));    
   delete jobj;                                                     //3
}


1. nenhuma exclusão para objeto do tipoJSONParser criado através do novo
fundido sem sentido para o
JSONParser*
O que há de errado com uma variável localJSONParser? Ou você queria usar um objeto temporário, mas não sabe sua assinatura?

2. Fundição sem sentido noJSONObject*
3
. As variáveis jv e jobj definitivamente não serão NULL? Caso contrário, a remoção de um ponteiro nulo no MQL imprimirá "lixo" no registro.

 
Sergey Dzyublik:


1. nenhuma exclusão para objeto do tipoJSONParser criado através do novo
fundido sem sentido para o
JSONParser*
O que há de errado com uma variável localJSONParser? Ou você queria usar um objeto temporário, mas não sabe sua assinatura?

2. Fundição sem sentido noJSONObject*
3
. As variáveis jv e jobj definitivamente não serão NULL? Caso contrário, a remoção de um ponteiro nulo na MQL imprimirá "lixo" no registro.

Obrigado, pelo menos isso é algo.

este método foi utilizado pelo autor da biblioteca, não vejo a utilidade de se fazer uma análise por escrito de outra forma


eu não entendo a situação com MQL quando se trabalha com ponteiros - não se pode desreferenciá-los quando o ponteiro se torna uma entidade, e quando é um ponteiro para um objeto - eu não sei o que fazer ((

SZY: Eu estudei C++ há 20 anos, não é muito usado para engenheiros de produção mais tarde, primeiro todos eles se sentaram em Delphi, depois se arrastaram para Sharp, eu também não vi C++ para controladores, tudo funciona em softwareespecializado- provavelmente é o selo das universidades para estudantes de engenharia - eles sempre começam a treinar com Pascal, mesmo em Volgograd Polytechnic eles lêem turbo-pascal....Quem sabe onde eles conseguem os compiladores ))))


ZS: apagar o refrão, não é agradável, geralmente é o contrário.

 
Igor Makanu:

Obrigado, isso é alguma coisa.

este método foi utilizado pelo autor da biblioteca, não vejo a utilidade de se fazer uma análise por escrito de outra forma


eu não entendo a situação com MQL quando se trabalha com ponteiros - não se pode desreferenciá-los quando o ponteiro se torna uma entidade, e quando é um ponteiro para um objeto - eu não sei o que fazer (((

SZY: Eu estudei C++ há 20 anos, não é muito usado para engenheiros de produção mais tarde, primeiro todos eles se sentaram em Delphi, depois se arrastaram até Sharp, para controladores também, eu não vi C++, tudo funciona em softwareespecializado- provavelmente é o selo das universidades para estudantes de engenharia - eles sempre começam a treinar com Pascal, mesmo na Volgograd Polytechnic eles lêem turbo-pascal....Quem sabe onde eles conseguem os compiladores ))))


SZY: retire o refrão, não é agradável, normalmente é o contrário.

Aqui não há indicadores) Há um cabo para a classe, sim trabalhar com ele é semelhante a trabalhar com um ponteiro, mas é aí que termina a coisa comum.

Agora para o destacado:

  • Você cria um objeto ou na pilha ou na pilha.
    CTest test;             //test - object
    CTest* test=new CTest;  //test - handle of object
    No primeiro caso, o compilador adiciona uma chamada implícita do destruidor, que não limpa nenhuma memória; ele apenas devolve o ponteiro da pilha à posição antes que a função seja chamada. No segundo caso, ao deixar o escopo, a memória ocupada pelo objeto permanece marcada como ocupada pelo gerenciador de memória e como nenhum ponteiro aponta mais para ele, ele não pode ser liberado (isto é chamado de vazamento de memória), então temos que destruir explicitamente o objeto através da eliminação.
  • Quanto ao tempo de execução local. Aqui o cabo, se não houver uma função sobrecarregada especialmente para ele, é implicitamente desreferenciado, por exemplo:
    class CTest{
    };
    
    void OnStart()
      {
       CTest test;
       CTest* _test=new CTest;
       Test(test);
       Test(&test);
       Test(_test);
       _Test(_test);
       delete _test;
      }
      
    void Test(CTest &test){Print("Object");}
    void Test(CTest* test){Print("Handle");}
    void _Test(CTest &test) {Print("Ok");}
    PS. Sim, e esqueça a Sharp, nada em comum))))
 

Vladimir Simakov:

PS. Sim, e esqueça o Sharp, nada em comum))))

Você não vai conseguir, você se acostuma com as coisas boas o tempo todo, é lógico, se você fizer asneira - VS lhe dirá imediatamente, e quando o código for executado - você deixa o corpo da função - apenas esqueça, você apenas atribui NULL ao código criado e ele remove a bagunça por si só ))

Obrigado, vou pensar sobre isso.

 
Igor Makanu:

Não vai funcionar, você se acostuma a uma coisa boa muito rapidamente, é tudo lógico, se você fizer alguma bagunça em algum lugar - a VS lhe dirá imediatamente, e na execução do código você deixa o corpo da função - você simplesmente esquece, no máximo você criou NULL - ele vai limpar por si só ))

Obrigado, vou pensar sobre isso.

Sim, apenas uma triste referência de objeto implícita (por exemplo, chamada de método em folha de invocação de algum delegado) vive na espessura do código e a memória se foi. Também não se pode fazer uma bagunça em Sharp.

Razão: