Non-Owning References (v1)
I asked on our ADUG forum : "Someone please show me a nicer way than this to create non-owning method references …"
{$APPTYPE CONSOLE}
program Project_Non_owning_ref;
uses
system.SysUtils;
function make_non_owning(const [ref] c:TObject; const m:Tproc):TProc;
begin
var _c := @c;
procedure begin
result := var x := TObject(Pointer(_c)^);
if x <> nil then m()
else writeln('dead call')
end
end;
type
class
TMyClass = integer;
field : procedure read;
procedure incr;
constructor create;
end;
procedure TMyClass.read; begin writeln(field); end;
procedure TMyClass.incr; begin inc(field); end;
constructor TMyClass.create; begin field := 42; end;
begin
var c := TMyClass.create;
var fn1 := make_non_owning(c,c.incr);
var fn2 := make_non_owning(c,c.read);
read;
c.incr; c.read;
c.incr; c.
fn1();
fn2();//c.free;
freeandnil(c);
fn1();
fn2();
readln;end.