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

Напомню, 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 секунд:Да и еще по поводу передачи параметров, для классов, динамических массивов, строк (не все), интерфейсов передаются ссылки. Для типов со счетчиком ссылок он может изменяться в зависимости от типа параметра. По поводу присваивания... вопрос сложный... обычно просто копируется ссылка, но иногда происходит копирование. 
