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
Seite 1 von 2  1 2      
internetnavigator

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

Doppeltes Create?

  Alt 7. Jun 2010, 18:26
Delphi-Version: 2010
Hallo

Ich habe eine kleine und kurze, schnell zu beantwortende Frage:

Ich sehe zurzeit Quellcode aus der Schule durch weil ich bald 'ne Klausur in Informatik schreibe.

Dabei bin ich auf Folgendes gestoßen:

Delphi-Quellcode:
  var
    LT, RT:TBintree;
{...}
    LT:=TBintree.Create;
    RT:=TBintree.Create;
{...}
    LT.create(TString.create(BlattL));
    RT.create(TString.create(BlattR));
{...}
Delphi-Quellcode:
// In der TBinTree Klasse
{...}
constructor create;overload; virtual;
constructor create(pObject:TObject);overload; virtual;
{...}
Ist das Create da nicht doppelt und könnte man das Erste nicht direkt in
Delphi-Quellcode:
    LT := TBintree.Create(TString.create(BlattL));
    RT := TBintree.Create(TString.create(BlattR));
ändern?
Weil eigentlich müsste dann doch LT bzw. RT von dem 2. Create erneut erstellt werden und das Erste eh "überschrieben" sein, oder?

Gruß !N

Geändert von mkinzler ( 7. Jun 2010 um 19:32 Uhr) Grund: Delphi-Formatierung aktiviert
  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, 18:28
Da wird der Konstruktor wie eine Methode benutzt. Ungewöhnlich, sollte aber funktionieren. Und ja, man sollte eigentlich gleich den zweiten Konstruktor aufrufen können.
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, 18:30
Funktionieren tut es auch. Nur es sieht so "unsauber" aus und ich habe die Befürchtung, dass, wenn ich es so in der Klausur schreibe, es Rot gibt. (Nebenbei der Code ist nicht von mir ). Von einer Lehrkraft, deshalb wundert es mich umso mehr.
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

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

AW: Doppeltes Create?

  Alt 7. Jun 2010, 18: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 18:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Doppeltes Create?

  Alt 7. Jun 2010, 18: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
 
#6

AW: Doppeltes Create?

  Alt 7. Jun 2010, 18: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.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: Doppeltes Create?

  Alt 7. Jun 2010, 18: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;
$2B or not $2B

Geändert von himitsu ( 7. Jun 2010 um 18:48 Uhr)
  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, 18: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.861 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Doppeltes Create?

  Alt 7. Jun 2010, 19: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.184 Beiträge
 
Delphi 12 Athens
 
#10

AW: Doppeltes Create?

  Alt 7. Jun 2010, 20: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.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz