StackEmulator2 := StackEmulator.Create();
Das erzeugt
keine neue Instanz!
Create auf einem Objekt, anstatt auf einer Klasse, initialisiert dieses Objekt nur "neu" und gibt einen Zeiger auf sich selber zurück.
Darum knallt es auch, wenn man sowas mit einem Objektzeiger macht, wo vorher kein Speicher zugewiesen wurde, also wo mal wieder jemand ausversehn die Variable, anstatt der Klass verwendete (T vergessen).
Delphi-Quellcode:
var
Obj: TComponent;
Obj := TComponent(TMyObj.NewInstance);
Obj.Create(Self);
// entspricht
Obj := TMyObj.Create(Self);
Sowas wird z.B. von Application.CreateForm genutzt, um vor dem Create an den Objektzeiger zu kommen und ihn in der hässlichen globalen Variable zu speichern.
Oder mann kann es nutzen, um vor dem Create Felder/Property zu setzen, wie z.B. bei einer TForm den ComponentState csLoading oder csDesigning.