About the author
The Delphi compiler in Berlin 10.1 introduces the concept of weak references.
With reference to the code below, without the [weak] attribute, when one and two is nil'd, the destructor is not called. With the [weak] attribute, the destructor is called. So, the weak references in the Delphi wiki now extends to Win32/Win64 (possibly iOS/OSX too?)
program Project1; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; type IMyInterface = interface procedure AddObjectRef(AMyInterface: IMyInterface); end; TObjectOne = class (TInterfacedObject, IMyInterface) private FName: string; [weak]anotherObj: IMyInterface; public procedure AddObjectRef(AMyInterface: IMyInterface); constructor Create(const AName: string); destructor Destroy; override; end; procedure main; var one, two: IMyInterface; begin one := TObjectOne.Create('one'); two := TObjectOne.Create('two'); one.AddObjectRef (two); two.AddObjectRef (one); two := nil; one := nil; end; { TObjectOne } procedure TObjectOne.AddObjectRef(AMyInterface: IMyInterface); begin anotherObj := AMyInterface; end; constructor TObjectOne.Create(const AName: string); begin inherited Create; FName := AName; end; destructor TObjectOne.Destroy; begin WriteLn(FName, ' is being destroyed'); inherited; end; begin main; end.
Learn why the map is cool in Go!
A method to design records so that they're allocated on a specific byte boundary, such as 16 bytes, 512 bytes, 4096 bytes, etc.
Learn the command line used to compile System.pas in Delphi
How to free more space on your home drive by redirecting the location for SDKs in RAD Studio