Liberar da memória todas as estancias criadas de uma classe
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.
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]
Curtidas 0
Respostas
Rodc
29/06/2009
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.
Sugiro você usar um TList que guarde os ponteiros para estas classes, e depois percorra o TList destruindo todas as classes referenciadas nela.
GOSTEI 0
Edsant
29/06/2009
Amigo, eu geralmente utilizo [b:ae71124014]interfaces[/b:ae71124014]. ai não preciso me preocupar com destruição de classes....
Até mais...
Até mais...
GOSTEI 0
[vaza]
29/06/2009
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?
GOSTEI 0
Rodc
29/06/2009
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.
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.
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.
GOSTEI 0
[vaza]
29/06/2009
Vlw cara...entendi :)
obrigadão.
Tentarei aqui.
obrigadão.
Tentarei aqui.
GOSTEI 0
[vaza]
29/06/2009
Tem como eu pegar o número de instancias de uma classe sem ser por TList como no exemplo?
GOSTEI 0
Rodc
29/06/2009
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...
A não ser que o RTTI do Delphi guarde alguma informação sobre os objetos criados...
GOSTEI 0
Osocram
29/06/2009
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]
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]
GOSTEI 0