Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Guiodai

Problema com método Destructor de objetos aninhados

Recommended Posts

Tenho um objeto que possui outro objeto, tipo assim:

 

type
  TProtecoes = class(TImage)
  private
	...
	lbNome: TLabel;
	...
	{ Private declarations }
  protected
	{ Protected declarations }
  public
	constructor Create(AOwner: TComponent); override;
	destructor Destroy; override;
	...
	{ Public declarations }
  published
	...
	property LabelNome: TLabel read lbNome write lbNome;
	...
	{ Published declarations }
  end;

E implementei o método Destroy de TProtecoes para que destruisse o objeto LabelNome automaticamente.

 

destructor TProtecoes.Destroy;
begin
  LabelNome.Destroy;
  inherited;
end;

Isso funciona quando resolvo excluir um objeto TProtecoes mas quando fecho a aplicação ocorre um erro do tipo "Runtime Error 216".

O que estou fazendo errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

você já tento da sguinte maneira:

 

destructor TProtecoes.Destroy;

begin

 

LabelNome.Release;

LabelNome := nil;

 

end;

 

 

flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro pode ocorrer também se esta tentando destruir um objeto mais de uma vez, pode colocar uma validação antes...

 

if LabelNome <> nil then
	LabelNome.Destroy;

O método LabelNome.Release não foi reconhecido pelo compilador e o uso do if também não funcionou. Se quando o programa fosse fechado houvesse um objeto TProtecoes na memoria ele dava o mesmo erro.

 

Se eu usar soh LabelNome := nill o que estou fazendo em termos de gerenciamento de memória? A memória ainda continua alocada para aquele objeto e eu apenas retirei a referência para aquele endereço de memória?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.