Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi inherited bei TObject.Create? (https://www.delphipraxis.net/32158-inherited-bei-tobject-create.html)

SirThornberry 19. Okt 2004 16:37


inherited bei TObject.Create?
 
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?

Kedariodakon 19. Okt 2004 16:46

Re: inherited bei TObject.Create?
 
öhm wenn das Object keine Parameter brauch, kannst den Constructor eigendlich auch weglassen...

Sanchez 19. Okt 2004 16:48

Re: inherited bei TObject.Create?
 
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

Stevie 19. Okt 2004 16:51

Re: inherited bei TObject.Create?
 
Guck dir doch mal den Konstruktor von TObject an! :roll: :zwinker:
Zitat:

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?

SirThornberry 19. Okt 2004 16:55

Re: inherited bei TObject.Create?
 
@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)

Robert Marquardt 19. Okt 2004 17:07

Re: inherited bei TObject.Create?
 
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.

Sanchez 19. Okt 2004 17:20

Re: inherited bei TObject.Create?
 
Zitat:

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 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