Em que momento destruir uma classe

Delphi

27/09/2016

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

Curtidas 0

Melhor post

Hélio Devmedia

Hélio Devmedia

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.
GOSTEI 1

Mais Respostas

Pablo Ricardo

Pablo Ricardo

27/09/2016

A utilização da classe é como controller.
GOSTEI 0
Andrêy Ferraz

Andrêy Ferraz

27/09/2016

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 --->
GOSTEI 0
Pablo Ricardo

Pablo Ricardo

27/09/2016

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