Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-11-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Funciones que devuelven objetos

En un proyecto que estoy haciendo se me ocurrió una función que me devolviera un objeto pero me encuentro en una interrogante: Si devuelve un objeto...¿Quien lo crea? la función o quien llama a la función?

Código Delphi [-]
Function GetTabla(nombre:String):TDataset;
var aTabla: TDataset
Begin
    aTabla := Tdataset.create(nil);
    GetTabla := aTabla;  // devolver la tabla recien creada
                                 // pero entonces...quien la destruye?¡???
                                // no se pierde al salir de la función??
end;
 
Procedure HazAlgo;
var unaTabla: TDataset;
Begin
   unaTabla := GetTabla("datos");   ///<--- Se puede hacer esto???
                                               // Pero si unaTabla no se ha construido?     
end;

Mi Teoría:

Se supone que todas las instancias de un objeto son simples punteros partimos de que en la funcion HazAlgo efectivamente unaTabla, al no crearse no reserva memoria para el objeto TDataset, esto lo hace la funcion GetTabla dentro de su codigo y devuelve el puntero a la memoria recientemente reservada (la funcion no la libera destruyendo el objeto que creo). Entonces asumo que unaTabla apunta al Objeto que cre{o la función, por lo que entonces, tendré que destruir directamente unaTabla para liberarla.

Quedando así:
Código Delphi [-]
Procedure HazAlgo;
var unaTabla: TDataset;
Begin
   unaTabla := GetTabla("datos");   //equivaldría a Tdataset.create(nil)
  Try
    { uso una tabla
     .
     .
     .
     }
  finally
    unaTabla.free; // Libero la memoria
  end;
 end;

Segun mi teoria este último código debe ser completamente válido...pero no lo sé hasta probarlo..

Alguna sugerencia? A lo mejor no estoy descubriendo nada nuevo...
__________________
AKA "El animalito" ||Cordobés a mucha honra||
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Devuelven el dinero de Windows a usuario de Linux Casimiro Notevi La Taberna 1 10-11-2006 00:06:33
Acerca de objetos 3d MakinaX Gráficos 4 19-06-2006 18:56:03
Gestión de queries que devuelven resultado nulo papulo Conexión con bases de datos 7 11-04-2006 18:08:48
Objetos jfontane Varios 1 04-07-2003 15:39:04
Metodos que devuelven referencias a sí mismos shaktale OOP 8 07-06-2003 03:04:12


La franja horaria es GMT +2. Ahora son las 04:25:04.


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