Erros, bugs, perguntas - página 1785
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
Eu sei para que serve o destruidor. Não me parece claro por que razão a palavra virtual deve ser escrita antes da sua definição.
Preciso dele para compatibilidade de código com C++, porque os destruidores são diferentes lá
Eu sei para que é utilizado o destruidor. Não compreendo porque é que temos de acrescentar a palavra virtual antes da sua definição.
Funções virtuais e destruidora >>>
A regra básica: se tiver pelo menos uma função virtual na sua classe, o destruidor também deve ser virtual. Lembre-se de que o destruidor não é virtual por defeito, por isso deve declará-lo explicitamente. Se não o fizer, tem quase a certeza de ter fugas de memória no seu programa. Mais uma vez, não é preciso muita inteligência para compreender porquê. Vejamos vários exemplos.
Já está, obrigado. Fazem muitas portas para a MQL5? - É por isso que os exemplos são tão específicos?
Funções virtuais e destruidora >>>
{
A * pA = new B;
delete pA;
return EXIT_SUCCESS;
}
Desta vez o objecto é construído como deve ser, mas quando é destruído, ocorre uma fuga de memória, porque o destruidor da classe derivada não é chamado.
A razão é que a eliminação é efectuada através de um ponteiro para uma classe base e o compilador utiliza a ligação antecipada para chamar o destruidor. O destruidor da classe de base não pode chamar o destruidor da classe derivada porque não sabe nada sobre ela. Como resultado, parte da memória atribuída para a classe derivada é irremediavelmente perdida.Para evitar isto, o destruidor da classe base deve ser declarado como virtual.
Não compreendo arquitectonicamente porque é que, ao tornar virtual o destruidor de base, aparece informação sobre o destruidor derivado.
A forma como o entendo agora é que quando a base é virtual, ao definirmos um destruidor derivado, fazemos um substituto para o destruidor derivado em vez do destruidor de base. Mas então o destruidor de bases não deve ser chamado neste exemplo.
Obviamente, não compreendo como isto funciona. Nunca tive problemas com funções virtuais na MQL5. Gosto muito do OOP por causa deles. Pensei ter compreendido tudo. Agora tenho um dilema completo. Por favor, explique-me nos seus próprios termos.
Retratar pouco. Específico apenas à primeira vista. Alguns "especialistas" escreveram aqui que TUDO mais de 3 classes derivadas é prejudicial. Tenho frequentemente apenas 3-4 classes base para inicializar correctamente e só depois começam as verdadeiras derivadas
Mas então o destruidor de bases não deve ser chamado neste exemplo.
É chamado implicitamente pelo destruidor derivado. É isso que na realidade o torna diferente das simples funções virtuais.
SymbolInfoTick() erro que devolve dados irrelevantes - assinalar o excesso. Construir 1525 x64. Teste do indicador, não testou no Expert Advisor:
Real, Abertura, Servidor de Acesso V. Tristeza! Preste atenção ao problema, por favor. E também ao problema na aplicação#1598238 (a partir da página 10, post de2017.01.26 09:43).
Caros programadores, vamos arranjar os carrapatos! Código fornecido, aqui está - o problema, não há necessidade de procurar nada, apenas reagir e resolvê-lo!