Tenho dúvidas porque o ponteiro para a classe número um, mas na verdade a classe número dois está na memória. É importante no caso dos destruidores, por isso perguntei-me se poderia haver aqui também um problema. Penso que nesta situação a libertação correcta da memória só pode ocorrer se houver alguns rótulos na memória (como char com terminador nulo) ou algo do género, foi por isso que perguntei sobre a alocação de memória.
220Volt: 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, que é apontada por um ponteiro que representa um objecto de 100 bytes de tamanho.
220Volt: 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.
Presumo que a sua pergunta esteja relacionada com a forma como funciona a reserva de memória. 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.
220Volt: 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.
Presumo que não tenha analisado a minha amostra. Caso contrário, não teria feito tais perguntas.
Estava a pensar, lembrei-me que se pode atribuir memória para uma série de int's por exemplo e depois apagar todas elas, apesar do facto de uma int ser pequena, provavelmente a mesma coisa com as classes. Obrigado pelas respostas.
mql5: 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.
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.