Biblioteca de classes genéricas - bugs, descrição, perguntas, recursos de uso e sugestões - página 25
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Porquê criar colecções e colocá-las numa kodobase se só servem para tipos incorporados)?
Também não são bons para estruturas embutidas.
Diga-me, talvez eu não compreenda alguma coisa, mas se eu tentar usar uma construção deste tipo:
Recebo um erro:
Opção' - os objectos são passados apenas por referência ICollection.mqh 14 18
e há uma pilha cheia de erros a seguir...Isto não funcionará, através de um modelo de modelo preciso de fazer, também trabalhei com esta questão, aqui está um exemplo de teste, parece funcionar correctamente
CData de classe - estrutura que queremos armazenar na lista
CDataBase - a própria lista
Em OnStart() - criamos uma lista, escrevemos-lhe valores, e depois leio-os. Verifico 2 vezes, porque no início perdi a visibilidade de uma variável local quando escrevia na lista - costumava escrever tudo bem, mas quando lia, depois recebi apontadores nulos e um erro
Não vai funcionar assim, é preciso usar modelos de modelos, eu também estava a tratar deste assunto, fiz um exemplo de teste, tudo parece funcionar correctamente
CData de classe - a estrutura que queremos armazenar na lista
CDataBase - a própria lista
Em OnStart () - criar uma lista, escrever-lhe valores e depois lê-los. Verifico duas vezes, porque primeiro perdi algures a visibilidade de uma variável local ao escrever para a lista - estava a escrever tudo bem, mas quando estava a ler, depois recebi apontadores nulos e um erro
O seu código funciona porque o CData ainda é uma classe, não uma estrutura. Se tentar utilizar o gerador para classes e estruturas de uma só vez, terá problemas, especialmente com o operador de eliminação. Estava convencido disso através das minhas próprias experiências com este "genérico". A questão é que esta biblioteca "genérica" não tem nenhum operador de eliminação e se se acrescentar uma nova classe a tal "colecção", depois de abandonar o programa haverá muitos objectos perdidos. Ou seja, é óbvio que originalmente este genérico foi escrito apenas para tipos primitivos.
Este código funciona para si porque o CData é uma classe, não uma estrutura. Se tentar usar genéricos para classes e estruturas ao mesmo tempo, encontrará imediatamente problemas, especialmente com o operador de eliminação. Estava convencido disso através das minhas próprias experiências com este "genérico". A questão é que esta biblioteca "genérica" não tem nenhum operador de eliminação e se se acrescentar uma nova classe a tal "colecção", depois de abandonar o programa haverá muitos objectos perdidos. Isto é, pode-se ver que originalmente este genérico foi escrito apenas para tipos primitivos.
Deixei de usar estruturas em MQL, a estrutura não tem vantagens, mas os constantes bugs e perda de tempo ao trabalhar com as estruturas que vão fornecer - li os posts dos antigos administradores com perguntas sobre as estruturas e eles basicamente diriam usar a classe em vez da estrutura - não uso estruturas de todo agora
SZZ: Encontrei isto quando deixei de utilizar estruturashttps://www.mql5.com/ru/forum/6343/page866#comment_7541747
porquê criar colecções e colocá-las numa kodobase se só servem para tipos incorporados)?
Conveniência que vem como padrão. Por conseguinte, não há necessidade de puxar - cada utilizador tem um.
Utilizo-a numa das minhas libras KB durante muito tempo.
Não vai funcionar assim, é preciso usar modelos de modelos, eu também estava a tratar deste assunto, fiz um exemplo de teste, tudo parece funcionar correctamente
CData de classe - a estrutura que queremos armazenar na lista
CDataBase - a própria lista
Em OnStart () - criar uma lista, escrever valores para ela e depois ler, 2 vezes verifico, porque no início perdi a visibilidade de uma variável local ao escrever para a lista - costumava escrever tudo bem, mas quando lia, depois recebi apontadores nulos lidos e recebi um erro
Bem, em primeiro lugar, implementou o seu alocador sobre uma lista e aí armazenou apontadores. Não é só isso, tem uma fuga quando destrói).
Em segundo lugar, deve ter utilizado correctamente o construtor de cópias em vez do operador da tarefa. Mas tudo isto é IMHO)
E o mais importante: os criadores só precisam de finalizar os genéricos, fazer alocadores no interior e suportar objectos personalizados. C++ já inventou tudo para eles) E não temos de inventar bicicletas.
Bem, antes de mais, implementou o seu alocador sobre uma lista e armazena aí as indicações. Não só isso, tem fugas de informação sobre a destruição)
Como detectou fugas de informação?
SZZ: é um exemplo de teste, tive de descobrir como trabalhar com listas em MQL, por isso fiz testes.
E o mais importante: os criadores devem apenas terminar os genéricos, fazer alocadores no interior e suportar objectos personalizados. C++ já inventou tudo para eles) E não temos de inventar bicicletas.
Escreva-o se for assim tão simples.
como foram detectadas as fugas?
ZS: é um exemplo de teste, tive de descobrir como trabalhar com listas em MQL, por isso fiz testes.
Cria cópias de objectos em AddValue através de novos, mas não os liberta em destruidor, apenas limpa a lista de apontadores.
escrever se é assim tão simples.
Quando eu tiver tempo e necessidade, escreverei. E, em geral, como exemplo, montar a sua própria fábrica de rolamentos não é uma boa ideia se precisar apenas de um modelo de rolamento)