Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 24-11-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Puedes regresar directamente como lo haces

Código Delphi [-]
Result := html;

pero no puedes liberarlo dentro de la misma función sino posteriormente. Por tanto, si usas simplemente:


Código Delphi [-]
LoadFromStream(CargarStream);

tendrás una fuga de memoria ya que no tienes ninguna referencia al Stream devuelto para poder liberarlo, así que tendrías que hacer algo como:


Código Delphi [-]
var
  Stream: TStream;

begin
  Stream := CargarStream;
  LoadFromStream(Stream);
  Stream.Free;
end;

de manera que no ahorras nada.

Si de plano te da flojera escribir tanto podrías englobar el stream dentro de una interfaz:

Código Delphi [-]
type
  ILazyStream = interface
    function GetStream: TMemoryStream;
    property Stream:  TMemoryStream read GetStream;
  end;

  TLazyStream = class(TInterfacedObject, ILazyStream)
  private
    FStream: TMemoryStream;

  public
    constructor Create;
    destructor Destroy; override;

    { ILazyStream }
    function GetStream: TMemoryStream;
  end;

...

constructor TLazyStream.Create(AStream: TMemoryStream);
begin
  inherited;
  FStream := TMemoryStream.Create;
end;

destructor TLazyStream.Destroy;
begin
  FStream.Free;
  inherited;
end;

function TLazyStream.GetStream: TMemoryStream;
begin
  Result := FStream;
end;

En tu función CargarStream creas una instancia de TLazyStream y esa es la que devuelves usando LazyStream.Stream:

Código Delphi [-]
function CargarStream: ILazyStream;
begin
  Result := TLazyStream.Create;

  ...
end;

...

LoadFromStream(CargarStream.Stream);

Así, cuando se pierda el contexto de LoadFromStream (es decir termine el procedimiento desde donde lo llamas) CargarStream, siendo una interfaz, automáticamente llamará al destructor de TLazyStream.

// Saludos
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:27:13.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi