Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.035 Beiträge
 
Delphi 12 Athens
 
#4

AW: OOP-Verständnisfrage: Destroy zerstört auch Ursprungsobjekt?

  Alt 22. Mär 2018, 09:30
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Mär 2018 um 09:41 Uhr)
  Mit Zitat antworten Zitat