COM-Objekte machen sowas. Die haben Referenzzähler. Der Overhead ist zwar "relativ" gering, aber doch spürbar, insbesondere bei zeitkritischen Anwendungen.
Delphi-Quellcode:
Var
x,y : IMyComInterface;
Begin
x := GetObject; // object wird alloziiert. RefCount = 1
x := Nil; // Referenz wird überschrieben, RefCount = 0==> Free
x := GetObject; // object wird alloziiert. RefCount = 1
y := x; // Refcount = 2
x := Nil; // Referenz wird überschrieben, RefCount = 1
End; // Ende des Gültigkeitsbereichs von x und y. Delphi generiert den entsprechenden Code, um Speicherlecks zu vermeiden