Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#1

Weak-Referenzen im Windows

  Alt 27. Mai 2020, 20:42
Delphi-Version: 10.4 Sydney
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat