![]() |
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:
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?
type
TMyObject = class(TObject) public constructor Create; end; constructor TMyObject.Create; begin inherited; end; |
Re: inherited bei TObject.Create?
öhm wenn das Object keine Parameter brauch, kannst den Constructor eigendlich auch weglassen...
|
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 |
Re: inherited bei TObject.Create?
Guck dir doch mal den Konstruktor von TObject an! :roll: :zwinker:
Zitat:
|
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) |
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. |
Re: inherited bei TObject.Create?
Zitat:
Näheres dazu findest du auf delphi-source.de --> ![]() 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