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; end;
Procedure HazAlgo;
var unaTabla: TDataset;
Begin
unaTabla := GetTabla("datos"); 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"); Try
finally
unaTabla.free; 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...