Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 599
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
Olá!
Você pode me dizer como mover o cursor para, digamos, a linha 7 em um documento de texto, para extrair um substrato desta posição...
O que é mais rápido - vários arquivos de texto com uma linha ou um arquivo com mais linhas?
Você precisa saber quantos bytes estão em uma linha e mover o ponteiro para 6 desses valores desde o início do arquivo.
Olá!
O que é mais rápido - muitos arquivos de texto com uma linha ou um arquivo com muitas linhas?
Depende da implementação específica do algoritmo e do problema a ser resolvido. Talvez no seu caso, a primeira opção seja mais rápida, mas eu não pensaria no desempenho em seu lugar.
Diga-me como mover o cursor, digamos, na 7ª linha de um documento de texto, para extrair o substrato já desta posição...
Leia a documentação padrão. A seção deoperações de arquivos. Por exemplo, você pode ler um arquivo linha por linha com FileReadString, um exemplo é diretamente da documentação:
Você pode me dizer como converter o valor de um clique do mouse sobre um gráfico em um valor de preço ou vice-versa?
Diga-me como converter o valor de um clique do mouse sobre um gráfico em um valor de preço ou vice-versa.
Use a função ChartXYToTimePrice. Veja "Operações com gráficos" na documentação.
Use a função ChartXYToTimePrice. Veja "Operações com gráficos" na documentação.
Obrigado.
Então, eles cometeram um erro com o CArrayObj. Ao invés de: CArrayObj test_objects; Eles escreveram: CArrayObj* test_objects, mas esqueceram de fazer um destruidor para ele; Talvez tenham configurado incorretamente o modelo de memória para trabalhar com o CArrayObj. Talvez os programadores simplesmente o exageraram com indicações. O diagnóstico é claro: o uso de indicadores onde eles não são necessários muitas vezes causa vazamentos.
Há uma função em alguma classe. Declaro um conjunto de objetos CArrayObj nele. Adiciono objetos de classe global a ela. Quando a função termina, o conjunto de objetos em si não é necessário. Os objetos são necessários, é claro.
Se eu criar o array como um ponteiro CArrayObj *test_objects, recebo objetos não selecionados no log, o que causará um erro fora da memória no final.
Se eu declarar o array como CArrayObj test_objects, adicionar objetos a ele, então acontece que quando a função termina e os objetos ficam indisponíveis, porque o array com objetos é meio que apagado...
Se eu declarar um array como CArrayObj test_objects, adicionar objetos a ele, então acontece que quando a função termina e os objetos ficam indisponíveis, porque o array com objetos é meio que apagado...
Isto é correto, porque, neste caso, você coloca CArrayObj test_objects na pilha e no espaço de endereço da função. Quando a função sai, o espaço de endereço da função é sobrescrito, incluindo seus CArrayObj test_objects.
A função é terminada, a matriz de objetos em si não é necessária. Os objetos, é claro, são necessários.
Lembre-se de uma vez por todas, se você precisa de objetos dentro de um CArrayObj, você também precisa do próprio CArrayObj. O CArrayObj é uma embalagem obrigatória. Não se pode passar sem isso, ponto final.
Se eu criar um array como um ponteiro CArrayObj *test_objects, então eu recebo objetos não selecionados no log, o que eventualmente levará a um erro fora da memória.
Neste caso, é criado um ponteiro para algum objeto CArrayObj na pilha. A pilha é um segmento da memória do espaço de endereçamento do programa onde a memória é alocada e apagada manualmente com a ajuda dos operadores novos e apagados correspondentes. Isso significa que se você escrever novo, deve haver em algum lugar sua cópia espelhada de exclusão. Além disso, novos e apagados podem ser localizados em diferentes partes do programa, por exemplo, em diferentes métodos:
Se, após a chamada foo_analize, ainda forem necessários objetos, o operador de eliminação pode ser colocado em outro lugar, onde os objetos são garantidamente necessários. Tal lugar universal pode ser OnDeinit, por exemplo, que é chamado antes do programa ser fechado.
Lembre-se do principal, se houver um novo operador, deve haver sempre um operador de exclusão para ele. Caso contrário, haverá vazamentos de memória. Os operadores novos e eliminados que trabalham no mesmo objeto não precisam estar "lado a lado" no mesmo método. O Delete pode estar em qualquer lugar longe da alocação de memória, desde que o Delete tenha uma referência ao objeto alocado na pilha.
** Embora isto seja verdade, é melhor evitar tais construções porque sempre temos que ter muito cuidado com onde e sob quais circunstâncias o operador de eliminação é chamado, o que nem sempre é óbvio. Ao invés disso, basta aprender a usar as aulas. A classe permite colocar e apagar objetos automaticamente na pilha, sem utilizar operadores novos e apagados:
Esta classe não contém indicações explícitas. Portanto, você não precisa usar tanto o novo como o apagado. Após sair do programa, a classe liberará automaticamente todos os objetos CItem e CArrayObj, o que torna a vida do desenvolvedor muito mais fácil.
Isto é correto, porque neste caso você coloca CArrayObj test_objects na pilha, e o espaço de endereço da função. Ao sair da função, o espaço de endereço da função é sobrescrito, incluindo seus CArrayObj test_objects.
Lembre-se de uma vez por todas - se você precisa de objetos dentro de um CArrayObj, você precisa do próprio CArrayObj. O CArrayObj é um pacote obrigatório. Não se pode passar sem isso, ponto final.
Neste caso, é criado um ponteiro para algum objeto CArrayObj na pilha. A pilha é um segmento da memória do espaço de endereçamento do programa onde a memória é alocada e apagada manualmente com a ajuda dos operadores novos e apagados correspondentes. Isso significa que se você escrever novo, deve haver em algum lugar sua cópia espelhada de exclusão. Além disso, novos e apagados podem ser localizados em diferentes partes do programa, por exemplo, em diferentes métodos:
Se, após a chamada foo_analize, ainda forem necessários objetos, o operador de eliminação pode ser colocado em outro lugar, onde os objetos são garantidamente necessários. Tal lugar universal pode ser OnDeinit, por exemplo, que é chamado antes do programa ser fechado.
Lembre-se do principal, se houver um novo operador, deve haver sempre um operador de exclusão para ele. Caso contrário, haverá vazamentos de memória. Os operadores novos e eliminados que trabalham com o mesmo objeto não precisam ser localizados "lado a lado" no mesmo método. O Delete pode estar em qualquer lugar longe da alocação de memória, desde que o Delete tenha uma referência ao objeto alocado na pilha.
** Embora isto seja verdade, é melhor evitar tais construções porque sempre temos que ter muito cuidado com onde e sob quais circunstâncias o operador de eliminação é chamado, o que nem sempre é óbvio. Ao invés disso, basta aprender a usar as aulas. A classe permite colocar e apagar objetos automaticamente na pilha, sem utilizar operadores novos e apagados:
Esta classe não contém indicações explícitas. Portanto, você não precisa usar tanto o novo como o apagado. Após a saída do programa, a classe liberará automaticamente todos os objetos CItem e CArrayObj, o que facilita a vida do desenvolvedor.
Obrigado. Mas ainda não encontrei uma resposta para minha pergunta. Onde devo colocar apagar se eu declarar um ponteiro. Repito, o objeto CArrayObj é declarado em uma função... como posso apagá-lo em Deinit()?
Mas antes resolvi o problema desta maneira. Antes de terminar a função:
Obrigado. Eu simplesmente não consegui encontrar uma resposta para minha pergunta exata. Onde devo colocar apagar se eu declarar um ponteiro. Novamente, o objeto CArrayObj é declarado em uma função... como posso apagá-lo em Deinit()?
Este não é um clube de telepatas. Você não anexou seu código, então você pode decidir por si mesmo onde colocar a exclusão.
Incorreto.