А вообще фееричный тред. 

Напомню, object  это старый тип, переменные этого типа могли располагаться как на стеке так и в куче. В отличие от крестов деструкторы там автоматически не вызывались (хотя память, выделенная на стеке, освобождается). Кстати, конструктор и деструктор были не обязательны, если не было виртуальных методов. Для создания объекта в куче использовался расширенный синтаксис new и dispose, примерно так
- Код: Выделить всё
- type PMyObject = ^TMyObject;
 TMyObject = object
 ...
 constructor Init;
 destructor Done;
 end;
 
 var p: PMyObject;
 ...
 
 //так
 p:=new(PMyObject, Init);
 //или так
 new(p, Init);
 //уничтожение
 dispose(p, Done);
 
 При обращении к элементам класса разыменовывание происходит автоматически (если стоит соответствующий ключ компилятора).Иначе надо писать, примерно так.
- Код: Выделить всё
-  p^.MyMethod();
 
Этот тип не поддерживает интерфейсы и считается устаревшим, вместо него следует использовать class. Переменные этого типа, по сути, являются типизированными указателями, а сами объекты ВСЕГДА! располагаются в куче. Кроме того, вся иерархия объектов происходит от специального, встроенного класса TObject.
 Обращаю внимание, все классы являются дочерними по отношению к встроенному в компилятор классу TObject.
Кроме этого, есть еще несколько типов, которые скрывают свою сущность указателя, кроме классов это некоторые строки, динамические массивы и интерфейсы. Они также автоматически разыменовываются и не только!
Добавлено спустя 6 минут 35 секунд:Да и еще по поводу передачи параметров, для классов, динамических массивов, строк (не все), интерфейсов передаются ссылки. Для типов со счетчиком ссылок он может изменяться в зависимости от типа параметра. По поводу присваивания... вопрос сложный... обычно просто копируется ссылка, но иногда происходит копирование. 
