AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Doppeltes Create?

Ein Thema von internetnavigator · begonnen am 7. Jun 2010 · letzter Beitrag vom 7. Jun 2010
Antwort Antwort
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#1

AW: Doppeltes Create?

  Alt 7. Jun 2010, 17:30
So wie ich das sehe ist das erste Create überflüssig. Es handelt sich ja auch um eine overload Prozedur...

Edit

Oh, das hatte ich übersehen

Liebe Grüße

Geändert von Delphi-Narr ( 7. Jun 2010 um 17:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Doppeltes Create?

  Alt 7. Jun 2010, 17:35
Nein, ist es nicht. Denn beim zweiten wird kein Objekt erzeugt! Oder siehst du da eine Zuweisung zu einer Objektvariablen?

MyObject := TMyClass.Create;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
internetnavigator

Registriert seit: 13. Mai 2006
94 Beiträge
 
RAD-Studio 2010 Arc
 
#3

AW: Doppeltes Create?

  Alt 7. Jun 2010, 17:39
Zugewiesen wird nichts, da hast du Recht, aber die nötige Änderung habe ich ja vorgeschlagen. Es schien mir nur doppelt, erst ein Objekt zu erzeugen und dann noch einmal das Create als Methode aufzurufen.

Gruß !N
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Doppeltes Create?

  Alt 7. Jun 2010, 17:41
Delphi-Quellcode:
LT:=TBintree.Create;
...
LT.create(TString.create(BlattL));
Wenn das/ein instanziertes Objekt in LT existiert, dann kann man einen Konstuctor auch über eine Objektinstanz erstellen und nicht nur über die Klasse.

Allerdings wird hier ein weiteres Objekt erstellt, welches im Nirvana verschwindet ... Ergo sollte ein Speicherleck entstehen.


Nee, wird doch als Methode aufgerufen
Delphi-Quellcode:
type
  TMyClass = class
    constructor Create;
  end;

constructor TMyClass.Create;
begin
  ShowMessage(IntToStr(Integer(Self)));
end;

var
  C: TMyClass;
begin
  C := TMyClass.Create;
  C.Create;

  C := nil;
  C.Create;
end;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 7. Jun 2010 um 17:48 Uhr)
  Mit Zitat antworten Zitat
internetnavigator

Registriert seit: 13. Mai 2006
94 Beiträge
 
RAD-Studio 2010 Arc
 
#5

AW: Doppeltes Create?

  Alt 7. Jun 2010, 17:52
Ja aber ein Objekt wird doch dennoch erstellt nur nie zugewiesen oder?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.879 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Doppeltes Create?

  Alt 7. Jun 2010, 18:35
Nein, ein Konstruktor hat eine doppelte Identität:
1. Klassenmethode; Aufruf über Klasse: erzeugt neue Instanz und gibt diese zurück
2. Normale Methode; Aufruf über Objekt(Instanz): setzt Werte im existenten Objekt
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Doppeltes Create?

  Alt 7. Jun 2010, 19:04
Hatte ich eigentlich auch so gedacht, aber ein Test hat mich eines Besseren belehrt.


Laut dem Inneren Code sieht es so aus, als wenn vor einm Konstructor (im ersten BEGIN geprüft wird, ob die Instantz existiert und wenn nicht, dann wird eine Instanz erstellt.
Beim Aufruf über den Klassentypen wird da wohl NIL übergeben.

So oder so wird am Ende die Instanz als Result zurückgeliefert, ob man dieses nun abfängt oder nicht.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
internetnavigator

Registriert seit: 13. Mai 2006
94 Beiträge
 
RAD-Studio 2010 Arc
 
#8

AW: Doppeltes Create?

  Alt 7. Jun 2010, 19:27
Und wie schaut es nun aus wenn man es kürzer haben will? Man brauch den 2. Aufruf doch nicht wenn man den Ersten wie von mir oben angegeben modifiziert, oder?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.124 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Doppeltes Create?

  Alt 7. Jun 2010, 20:07
Und wie schaut es nun aus wenn man es kürzer haben will? Man brauch den 2. Aufruf doch nicht wenn man den Ersten wie von mir oben angegeben modifiziert, oder?
Jain.
Dadurch, dass man den Konstruktor verwendet, kann man gezielt das eigentliche Tree-Objekt erzeugen, und kann somit, strukturiert, die Resourcen belegen, und wieder freigeben.
Beispielsweise lassen sich die beiden Bäume so einmalig im OnCreate eines Formulares erzeugen und im OnDestroy wieder freigeben, ohne die sonstigen Möglichkeiten der Klasse zu benutzen.
So kann man dann die Bäume mehrfach verwenden.

Wie sehen eigentlich die Konstruktoren intern aus.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz