I know obviously, that a class is stored as a pointer to the date which itself is on the heap, and object is pure date itself at the stack, but ignoring this for a second, they should be behave the same ,right?
Not quite, and it depends on quite a lot of things: v.g. whether the object has virtual or dynamic fields/methods, and other things. In fact, AFAIK, most complex types are really
pointers, under the hood, i..e the generated code takes the instance variable as pointing someplace (whether heap or stack) where the "real" data resides.
Also, old-style objects are not
neccessarily stored in the stack (though they may be): if you use the extended
New() and
Dispose() to create them, for example, the instance data should be in the heap. Indeed, it couldn't be otherwise: given their size (for other than record-like objects) they would consume the stack fairly quickly.
The difference between old-style objects and classes is not big; it's just enough that to make them "compatible" is not the straight proposition it may sound like.