Fórum Liberar da memória todas as estancias criadas de uma classe #371718

29/06/2009

0

Pessoal...
Tem como eu liberar da memória todas as estancias criadas de uma determinada classe?
Vamos dizer que essa classe esta criando outras estancias dela mesma...
Em um determinado momento, todo e qualquer objeto que foi criado dessa classe, gostaria de liberar da memória....
tem como?
Abraços.


[vaza]

[vaza]

Responder

Posts

29/06/2009

Rodc

Se você tem o ponteiro para estas classes tem como sim... mas se você está fazendo esta pergunta é porque possivelmente você não tem os ponteiros para estas classes, correto?
Sugiro você usar um TList que guarde os ponteiros para estas classes, e depois percorra o TList destruindo todas as classes referenciadas nela.


Responder

Gostei + 0

29/06/2009

Edsant

Amigo, eu geralmente utilizo [b:ae71124014]interfaces[/b:ae71124014]. ai não preciso me preocupar com destruição de classes....

Até mais...


Responder

Gostei + 0

29/06/2009

[vaza]

Se você tem o ponteiro para estas classes tem como sim... mas se você está fazendo esta pergunta é porque possivelmente você não tem os ponteiros para estas classes, correto? Sugiro você usar um TList que guarde os ponteiros para estas classes, e depois percorra o TList destruindo todas as classes referenciadas nela.


Amigo, poderia me dar um simples exemplo por favor?


Responder

Gostei + 0

29/06/2009

Rodc

Faz um tempo que não programo mais em Delphi, só em C++Builder, mas vou tentar fazer um exemplo simples, dentro do evento de um botão, por exemplo.
var
    lista: TList;
    botao: TButton;
    x: integer;
begin
lista := TList.Create();

    // cria primeiro botão
    botao = TButton.Create(self);
    // adiciona primeiro na lista
    lista.Add(botao);
    //cria segundo botão
    botao = TButton.Create(self);
    // adiciona segundo na lista
    lista.Add(botao);
    //cria terceiro botão
    botao = TButton.Create(self);
    // adiciona terceiro na lista
    lista.Add(botao);

    /* neste momento a lista contém o ponteiro de três
       classes do tipo TButton instanciadas em memória */

    // Percorre a lista de botões destruindo as classes
    for x:=lista.Count downto 0 do
    begin
    TButton(lista[x]).Free;
        lista.Delete(x);
    end;
end;

Não sei nem se vai compilar este código, pois não testei... Mas a idéia é demostrar que você criou três objetos em memória e depois destrui eles, apenas com a referência para a memória deles.


Responder

Gostei + 0

29/06/2009

[vaza]

Vlw cara...entendi :)
obrigadão.
Tentarei aqui.


Responder

Gostei + 0

30/06/2009

[vaza]

Tem como eu pegar o número de instancias de uma classe sem ser por TList como no exemplo?


Responder

Gostei + 0

30/06/2009

Rodc

Até onde eu saiba não tem como, pois se você cria um objeto em memória e depois não guarda o endereço onde o objeto está alocado em memória, como é que você vai acessar ele? Vai varrer toda a memória até encontrar uma estrutura válida?
A não ser que o RTTI do Delphi guarde alguma informação sobre os objetos criados...


Responder

Gostei + 0

30/06/2009

Osocram

Amigo acho q a solução do rodc é a melhor.
usando TList, é o que eu faria tbm.
Apesar que depende o vc realmente precisa podemos dar outras soluções.

[quote:1446a06dc6=´[VAZA]´]Tem como eu pegar o número de instancias de uma classe sem ser por TList como no exemplo?[/quote:1446a06dc6]


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar