ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Free And Nil -

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
tchadrack
Novato
Novato


Registrado: Terça-Feira, 22 de Novembro de 2016
Mensagens: 32

MensagemEnviada: Qui Jan 18, 2018 4:59 pm    Assunto: Free And Nil - Responder com Citação

Digamos que eu tenha por exemplo, a seguinte situação:


Código:

TTeste = class
end;

Texemplo = class
public
teste : TTeste;
end;

Então eu crio o objeto:

Código:
exemplo := TExemplo.create;


-->aqui a propriedade exemplo.teste é igual a 'nil'

Chamo o método create:

Código:
exemplo.teste := TTeste.create;



Agora eu quero libera-lo da memoria, para que exemplo.teste volte a ser nil,

Como devo proceder?

Se chamo exemplo.teste.free, ele não fica como nil.

E se tento chamar o método freeandnil(exemplo.teste) recebo uma mensagem de erro:

E2197 Constant object cannot be passed as var parameter

Alguém sabe a maneira correta de fazer isto?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
tchadrack
Novato
Novato


Registrado: Terça-Feira, 22 de Novembro de 2016
Mensagens: 32

MensagemEnviada: Sex Jan 19, 2018 7:54 am    Assunto: Responder com Citação

Colocar um método na própria classe TExemplo, que faça:

Código:
FreeAndNil(FTeste);
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
viox
Colaborador
Colaborador


Registrado: Sábado, 22 de Outubro de 2011
Mensagens: 1090
Localização: SINOP - MT

MensagemEnviada: Qui Jan 25, 2018 12:59 pm    Assunto: Responder com Citação

Olá amigo as boas práticas diz que deve ser algo mais ou menos assim...
Código:
 
  TTeste = class(TObject);

  TExemplo = class(TObject)
  strict private
    FTeste: TTeste;
  public
    constructor Create();
    destructor Destroy(); override;
    property Teste: TTeste read FTeste write FTeste;
  end;


//implementacao

constructor TExemplo.Create;
begin
  inherited;
  FTeste := TTeste.Create();
end;

destructor TExemplo.Destroy;
begin
  FTeste.Free();
  inherited;
end;


A não ser que seu caso seja outro bem especifico
_________________
Just another Delphi guy.


http://www.soft42.com
http://www.nortaonegocios.com.br
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB