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
1) Achei que havia um erro aqui:
Seção: Passando parâmetros para o construtor"A função Init() está separada na seção private para garantir que a classe possa ser reinicializada."
possível:
A função Init() está reservada na seção pública para oferecer a possibilidade de reinicializar a classe.
2) Dê um exemplo de uso do recurso"create an array with class instances (objects)" para a seção "ObjectArray". Infelizmente, não consigo descobrir "para que isso é usado".
3) Na seção "Mais sobre encapsulamento (privado, protegido, público)", a classe base->classe descendente é mencionada de passagem. Talvez esse dado(class Class: public CBase) devesse ser explicado no início da seção, pois percebi isso mais tarde.
4) não encontrou:Fig.6. A visibilidade da função "extra" (seta vermelha) é determinada pelo tipo de ponteiro com o qual a classe é carregada. Esse exemplo pode ser encontrado no apêndice, no arquivo OOP_sDefaultVirtual_1.mq5.
5) Não encontrei uma indicação clara do que é uma biblioteca. Aparentemente, uma forma de armazenar a(s) classe(s) das funções? Ou seja, semelhante ao arquivo de inclusão, só que o arquivo de inclusão é armazenado como fonte, e a biblioteca como uma dll compilada?
Muito obrigado pelo artigo! Fiquei especialmente satisfeito com a apresentação consistente do material.
1) Achei que havia um erro aqui:
Seção: Passando parâmetros para o construtor"A função Init() está separada na seção private para garantir que a classe possa ser reinicializada."
possível:
A função Init() está reservada na seção pública para oferecer a possibilidade de reinicializar a classe.
2) Dê um exemplo de uso do recurso"create an array with class instances (objects)" para a seção "ObjectArray". Infelizmente, não consigo descobrir "para que isso é usado".
3) Na seção "Mais sobre encapsulamento (privado, protegido, público)", a classe base->classe descendente é mencionada de passagem. Talvez esse dado(class Class: public CBase) devesse ser explicado no início da seção, pois percebi isso mais tarde.
4) não encontrou:Fig.6. A visibilidade da função "extra" (seta vermelha) é determinada pelo tipo de ponteiro com o qual a classe é carregada. Esse exemplo pode ser encontrado no apêndice, no arquivo OOP_sDefaultVirtual_1.mq5.
5) Não encontrei uma indicação clara do que é uma biblioteca. Aparentemente, uma forma de armazenar a(s) classe(s) das funções? Ou seja, semelhante ao arquivo de inclusão, só que o arquivo de inclusão é armazenado como fonte, e a biblioteca como uma dll compilada?
Muito obrigado pelo artigo! Fiquei especialmente satisfeito com a apresentação consistente do material.
1. Sim.
2. Há um exemplo na seção "Array of objects"; na verdade, a seção inteira é um exemplo com uma descrição.
3. Isso é considerado na seção "Uso da OOP para alterar a lógica de operação do programa".
4. As palavras "This example is in the appendix in the file..." (Este exemplo está no apêndice do arquivo...) significa que o arquivo contém um exemplo para a seção indicada pelo cabeçalho da seção. Isso não significa que os exemplos duplicam tudo o que está escrito no artigo. Esses exemplos podem não existir, pois tudo está escrito no artigo. Mas os exemplos estão lá, você pode tomá-los como base e fazer experiências. O artigo é o principal, os exemplos são secundários.
5. Уже давно указано: http://ru.wikipedia.org/wiki/%C1%E8%E1%EB%E8%EE%F2%E5%EA%E0_(%EF%F0%EE%E3%F0%E0%EC%EC%E8%F0%EE%E2%E0%ED%E8%E5)
Artigo muito interessante, escrito em uma linguagem competente e "acessível".
Obrigado ao autor.
Tenho dois exemplos de código baseados/copiados deste artigo. Ambos criam uma matriz de ponteiros para uma classe e os excluem ao sair. No entanto, um sai com um vazamento de memória e o outro sai sem vazamento de memória. A única diferença é que o segundo exemplo tem o 'Alert' no destrutor comentado. Quando o alerta no destrutor é removido, há um vazamento de memória. Isso é muito estranho. Alguém pode explicar??? Por favor, ajudem, isso está me deixando LOUCO.
No final dos exemplos de código deste artigo, incluí um exemplo extremamente simples de código que escrevi e que também tem um vazamento de memória. Novamente, por que ???? Não há nada complicado nesse exemplo final de código...
Esse código funciona sem vazamento de memória:
Mensagens do registro especializado, observe que não há vazamento de memória:
PI 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 0
KP 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 1
JG 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 2
EN 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 3
LF 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 4
OM 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 5
FD 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 6
IK 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 7
HS 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 8
CJ 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 9
Esse código sai COM um vazamento de memória!!!! Why????????? A única diferença é comentar o 'Alert' no destrutor...
Mensagens do registro especializado, observe o vazamento de memória:
FM 1 OOP_sConstDestr_2 (EURUSD,M1) 13:51:19 10 objetos não excluídos restantes
EG 1 OOP_sConstDestr_2 (EURUSD,M1) 13:51:19 Restam 10 objetos do tipo CName
GO 1 OOP_sConstDestr_2 (EURUSD,M1) 13:51:19 200 bytes de memória vazada
Exemplo final , meu código, muito simples, mas sai com um vazamento de memória....
Mensagens do registro de especialistas, observe o vazamento de memória:
MR 0 tester (EURUSD,M1) 14:07:23 Last Error- 0 Hora atual: 2013.02.06 23:07:23
FL 1 tester (EURUSD,M1) 14:07:23 10 objetos não excluídos restantes
KN 1 tester (EURUSD,M1) 14:07:23 10 objetos do tipo CCandleStick restantes
JS 1 tester (EURUSD,M1) 14:07:23 160 bytes de memória vazada
Tenho dois exemplos...
Verifiquei todas as três varaints. Todas as três são idênticas. Todas estão normais. Nenhuma apresenta vazamentos. Nesses exemplos, não pode ser - temos a matriz, em cada elemento da matriz há uma instância e, ao terminar, excluímos todos os objetos. Os objetos não criam cópias de si mesmos, você não pode deixar de excluir algo. Se o objeto cria uma cópia de si mesmo, então podemos ter dificuldades com a exclusão, pois é muito fácil perder alguma coisa. Mostre as variantes que realmente têm vazamento.
Use o botão SRC para inserir o código (melhor ainda - anexar arquivos).
Desculpe-me pelo meu inglês:)
Verifiquei as três varetas. As três são idênticas. Todas estão normais. Nenhuma apresenta vazamentos. Nesses exemplos, não pode ser - temos a matriz, em cada elemento da matriz há uma instância e, ao terminar, excluímos todos os objetos. Os objetos não criam cópias de si mesmos, você não pode deixar de excluir algo. Se o objeto cria uma cópia de si mesmo, então podemos ter dificuldades com a exclusão, pois é muito fácil perder alguma coisa. Mostre as variantes que realmente têm vazamento.
Use o botão SRC para inserir o código (melhor ainda - anexar arquivos).
Desculpe-me pelo meu inglês:)
Muito obrigado por dedicar seu tempo para responder. Não sei se você viu minha pergunta de acompanhamento. Ela estava em um comentário separado que provavelmente foi excluído porque não estou muito familiarizado com este fórum. No entanto, tentei executar todos os três exemplos em um computador mais antigo com uma versão mais antiga do MetaTrader. Na versão mais antiga, todos os três pareciam funcionar bem. Ele não gerou um erro de "vazamento de memória" no registro do expert, acho que era a versão 560???Acredito que era a versão 560?? não me lembro e atualizei a 560 para a nova versão 756. Após a nova versão, tenho os mesmos problemas de vazamento de memória. É possível que a versão antiga não tenha relatado os problemas de vazamento de memória porque não era um recurso? Qual versão você está usando? Mais uma vez, obrigado.