Discussion started with:
This is valid point, I must concede. We need to have an option to reference count just for explicitly designated object types and variables. And a first-class one, without need to build an interface wrapper.
Which means not some crappy wrappers like shared_ptr, no, lets introduce compiler magic and (non-breaking) language changes.
like
FObject: auto TObject; // compiler, just manage the lifetime automacally
type TMyRefObject = class auto (TObject) // all instances are automatic
var manualRef := unsafe(RefCountedObject); // Compiler, I understand the risk, just give me raw pointer
var autoInline := auto TObject.Create;// compiler, manage it automatically