Здравствуйте.

Скажите пожалуйста, где можно почитать об особенностях реализации ООП в Delphi/Free pascal
Интересует какой подход более эффективен (по быстродействию, по объёму кода и т.п.)
Как я понимаю, сейчас есть две ветки ООП
## Код:
```
pMyObject = ^tMyObject
tMyObject = OBJECT
    CONSTRUCTOR Init ();
    PROCEDURE Foo (); VIRTUAL;
    DESTRUCTOR Done ();
END;
...
VAR
    pObj : pMyObject;
    tObj : tMyObject;
...
BEGIN
   pObj := NEW (pMyObject, Init ());
   tObj.Init ();
   ...
   pObj^.Foo ();
   tObj.Foo ();
   ...
   tObj.Done ();
   DISPOSE (pObj, Done ());
```


и второй
## Код:
```
tMyClass = CLASS
        CONSTRUCTOR Init ();
        PROCEDURE Foo ();
        DESTRUCTOR Done ();
    END;
...
VAR
    MyClass : tMyClass;
...
BEGIN
    MyClass := tMyClass.Init ();
    MyClass.Foo ();
    MyClass.Done ();
...
```


Как писать правильно ?