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
Os destruidores na MQL5 são sempre virtuais. Tudo é apagado correctamente, tente colocar Print(__FUNCSIG__); em destruidores.
Fi-lo em VC++, mas penso que os mecanismos de libertação de memória são os mesmos?
Mas o seu exemplo funcionará correctamente, porque pode especificar destruidor virtual apenas para a classe base.
Vou tentar colocar a ideia de uma forma ligeiramente diferente:
Dado:
Acções:
P.S.: a figura mostra o modelo de memória )
Dúvidas porque o ponteiro para a classe número um e na verdade na classe de memória número dois. É importante no caso dos destruidores, por isso estava a pensar se pode haver aqui também um problema. Penso que em tal situação a libertação correcta da memória só pode acontecer se houver alguns rótulos na memória (como o char com o mineiro zero) ou algo do género, foi por isso que perguntei sobre a alocação de memória.
A sua dúvida é porque não especificou os construtores (é importante compreender o que se está a passar neste caso), tente executar este exemplo e compreenderá tudo:
HZ a construção em si, bem como a eliminação é escalonada, e toda esta informação é armazenada (o próprio ponteiro virtual lembra-se que a classe foi construída como um composto da base e descendente), e ao eliminar, os destrutores são chamados em ordem inversa, da mais recente para a anterior.
Não se trata de destruidores, mas sim da própria classe, e mais precisamente de quantos bytes ocupa. Acontece que atribuímos 200 bytes e depois dizemos-me para libertar a memória apontada pelo ponteiro que representa o objecto com o tamanho de 100 bytes.
Sim, o pool de memória sabe durante quanto tempo um pedaço de memória será libertado por uma chamada de eliminação.
O local onde esta informação é armazenada depende da implementação do pool.
Por exemplo, se der um ponteiro a um objecto em C++ que não é atribuído através de novo, verá como a sua aplicação irá falhar.
Não se trata de destruidores, mas sim da própria classe, e mais precisamente de quantos bytes ocupa. Acontece que atribuímos 200 bytes e depois dizemos-me para libertar a memória apontada pelo ponteiro que representa o objecto com o tamanho de 100 bytes.
Compreendo que a sua pergunta tem a ver com a forma como a piscina de memória funciona.
Sim, a reserva de memória sabe quanto tempo uma peça será libertada por uma chamada de eliminação.
O local onde esta informação é armazenada depende da implementação do pool.
Por exemplo, se der um ponteiro a um objecto em C++ que não foi atribuído através de novo, verá como a sua aplicação irá falhar.