Em que momento destruir uma classe

27/09/2016

0

Tenho a classe

unit untEmpresaController;

interface

type
  TEmpresaController = class
  strict private
    class var FInstance: TEmpresaController;
    constructor Create;
  private
  public
    class function GetInstance: TEmpresaController;
  end;

implementation

{ TEmpresaController }

constructor TEmpresaController.Create;
begin
  inherited;
end;

class function TEmpresaController.GetInstance: TEmpresaController;
begin
  If FInstance = nil Then
  begin
    FInstance := untEmpresaController.TEmpresaController.Create();
  end;
  Result := FInstance;
end;

end.

"exemplo"

Em um form eu eu chamo a GetInstance, crio tudo.. ok.

Em qual momento eu tenho necessidade de destruir essa classe? Estou tendo dificuldade pra definir quando e onde destruir essa classe.

Caso a pergunta seja vaga, posso explicar melhor. (É, não coloquei o destructor dela, é só um exemplo do que to usando de modo geral.)
Pablo Ricardo

Pablo Ricardo

Responder

Post mais votado

29/09/2016

Você implementou o padrão Singleton, pelo que vi.
Eu nunca tentei utilizar o código [b]class var FInstance: TEmpresaController [/b] talvez porque seja um recurso de versões mais recentes do Delphi, porem acredito que é o mais correto porque é é similar como se faz em outras linguagens.

Sempre declarei um var abaixo da seção implementation, criando uma variavel de unidade mas de escopo protegido, onde não é acessado por outras unidades, e no final antes do ultimo end (end.) eu faço o seguinte

initialization

finalization
Free(FInstance);
end.



Assim, quando a aplicação for fechada, essa instância será destruída.

Espero ter sido útil, se fui, por favor, marque um Joinha para eu ficar ciente.

Hélio Devmedia

Hélio Devmedia
Responder

Mais Posts

27/09/2016

Pablo Ricardo

A utilização da classe é como controller.
Responder

27/09/2016

Andrêy Ferraz

class function TEmpresaController.GetInstance: TEmpresaController;
begin
If FInstance = nil Then
begin
FInstance := untEmpresaController.TEmpresaController.Create();
end;
Result := FInstance;
---> Freeandnil(Finstance);
end;

Apenas acrescente isso ai que indiquei na seta --->
Responder

27/09/2016

Pablo Ricardo

Logo após criar vou destruir... seguindo seu exemplo, fiquei confuso. Não entendi. Poe explicar sua lógica?
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar