Wurde das jetzt erst repariert, oder geht das schon länger?
[EDIT] im 10.3.3 geht es auch schon.
Weiß zufällig wann das repariert wurde?
Hatte es damals, vor vielen Jahren ausprobiert und gefrusstet die letzten Jahre sinnlos ersatzweise weiterhin böse in Pointer gecastet.
War jetzt wieder auf die Idee gekommen, da in 10.4 das Speichermanagement etwas geändert wurde.
> unified memory management
Als ich es das letzte Mal versuchte, da ging es nur im NextGen und der Windows-Compiler hatte das [Weak] einfach so und ohne Warnung ignoriert.
Delphi-Quellcode:
type
TTest = class(TInterfacedObject)
destructor Destroy; override;
end;
destructor TTest.Destroy;
begin
ShowMessage('bin weg');
inherited;
end;
procedure TForm2.FormCreate(Sender: TObject);
var
I1: IInterface;
[Weak] I2: IInterface;
begin
I1 := TTest.Create;
I2 := I1;
I1 := nil; // hier wird das Interface/Objekt freigegeben und I2 auf NIL gesetzt
if Assigned(I2) then
ShowMessage('och nö');
end;
PS: die Klassenverfollständigung mag keine Attribute.
Delphi-Quellcode:
type
TTest = class(TInterfacedObject)
destructor Destroy; override; // hier der Cursor und Strg+Shift+C
end;
procedure TForm2.FormCreate(Sender: TObject);
var
I1: IInterface;
[Weak] I2: IInterface;
begin
I1 :=
end;
und raus kommt das
Delphi-Quellcode:
type
TTest = class(TInterfacedObject)
destructor Destroy; override;
end;
procedure TForm2.FormCreate(Sender: TObject);
var
I1: IInterface;
[Weak] I2: IInterface;
{ TTest }
destructor TTest.Destroy;
begin
inherited;
end;
begin
I1 :=
end;