AGB  ·  Datenschutz  ·  Impressum  







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

inherited bei TObject.Create?

Ein Thema von SirThornberry · begonnen am 19. Okt 2004 · letzter Beitrag vom 19. Okt 2004
Antwort Antwort
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#1

inherited bei TObject.Create?

  Alt 19. Okt 2004, 17:37
Hallo,

wenn ich eine neue Klasse von TObject ableite so kann ich ja den Constructor (Create) nicht überschreiben.
Muss man trotzdem in dem neuen Constructor "inherite Create" aufrufen?

bisher sehen objecte die ich von TObject abgeleitet ab so aus
Delphi-Quellcode:
type
  TMyObject = class(TObject)
  public
    constructor Create;
  end;

constructor TMyObject.Create;
begin
  inherited;
end;
Bisher habe ich es immer hinngeschrieben weil ich mir dachte das ja irgendwo erstmal die Grundinstanz erstellt werden muss. Wenn das "inherited" nicht nötig ist, richtet es dann irgendwelchen Schaden (Speicherlecks etc.) an wenn ich es doch hinnschreibe?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: inherited bei TObject.Create?

  Alt 19. Okt 2004, 17:46
öhm wenn das Object keine Parameter brauch, kannst den Constructor eigendlich auch weglassen...
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#3

Re: inherited bei TObject.Create?

  Alt 19. Okt 2004, 17:48
Hallo,
IMHO brauchst du den "inherited Create"-Aufruf nicht, er sollte aber auch nicht wirklich schaden.
Der Konstruktor von TObject ist leer. Dort passiert nix.
Der Konstruktor-Aufruf per inherited nimmt keine Speicherreservierungen oder ähnliches vor. Das passiert nur bei normalen Aufrufen. Also glaube ich, dass es egal ist, bin mir aber nicht sicher.

grüße, daniel
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

Re: inherited bei TObject.Create?

  Alt 19. Okt 2004, 17:51
Guck dir doch mal den Konstruktor von TObject an!
Zitat von Kedariodakon:
öhm wenn das Object keine Parameter brauch, kannst den Constructor eigendlich auch weglassen...
Vielleicht werden ja irgendwelche Felder initialisiert oder Objekte erzeugt?
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: inherited bei TObject.Create?

  Alt 19. Okt 2004, 17:55
@Daniel: der Constructor liefert ja aber eine Instanz zurück, also wird da schon speicher reserviert, denk ich mir zumindest, bin mir aber auch nicht sicher

@Steve: Der Constructor von TObject ist leer was also die Antwort an Daniel wieder nichtig macht weil damit ja geklärt ist das der Constructoraufruf nix macht.

@Kedariodakon: Den Constructor weglassen kann ich auch nicht da ja im Constructor noch private-Object initialisiert werden müssen. (war nur im beispiel leer (hab ja auch die ganzen anderen methoden etc. weg gelassen))

Thx an Steve der somit die Frage beantwortet hat - Der Constructor von TObject macht also nix und kann somit weg gelassen werden richtet aber auch keinen schaden an wenn man ihn aufruft.
Daraus folgt eigentlich das man eine Variable vom Typ TObject(ist ja eigentlich nur nen Pointer) definieren kann und dann sofort auf die Methdoen zugreifen kann (falls diese überhaupt verwendbar sind da es bei TObject kein private, public etc. gibt)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

Re: inherited bei TObject.Create?

  Alt 19. Okt 2004, 18:07
Es schadet nicht den Aufruf wegzulassen, aber man sollte ihn trotzdem machen.
Besonders wenn man die Klasse einem Refactoring unterwirft kann man moeglicherweise von einer anderen Klasse ableiten, die das inherited Create dann braucht.
Ein guter Programmierer denkt immer daran das Sourcen hauptsaechlich geaendert werden.
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#7

Re: inherited bei TObject.Create?

  Alt 19. Okt 2004, 18:20
Zitat von SirThornberry:
der Constructor liefert ja aber eine Instanz zurück, also wird da schon speicher reserviert, denk ich mir zumindest, bin mir aber auch nicht sicher
Die Speicherreservierung ist IMHO Compiler-Magic und läuft nicht, wenn der Konstruktor durch inherited ausgeführt wird.
Näheres dazu findest du auf delphi-source.de --> http://www.delphi-source.de/grundlag...onstruktor.php

Aber Roberts Argument für den Aufruf ist eigentlich ziemlich einleuchtend.

grüße, daniel
Daniel
Testen ist feige!
  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 05:40 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