AGB  ·  Datenschutz  ·  Impressum  







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

Konstruktor Create Virtual oder nicht?

Ein Thema von smudo · begonnen am 29. Aug 2007 · letzter Beitrag vom 23. Sep 2008
Antwort Antwort
Seite 4 von 4   « Erste     234   
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#31

Re: Konstruktor Create Virtual oder nicht?

  Alt 23. Sep 2008, 08:04
Da meine Frage grob in die gleiche Richtung geht und ich nicht extra für so etwas banales nen neuen Thread aufmachen will, häng ich mich einfach mal hinten dran.

Ich möchte lediglich wissen: wenn ich eine eigene Klasse von TObject ableite mit einem eigenen Konstruktor und Destruktor, muss ich dann zu Beginn des Konstruktors erstmal inherited aufrufen, genauso wie am Ende des Destruktors? Also quasi so:
Delphi-Quellcode:
interface

  TMyClass = class(TObject)
  private
    FBlaBlubb: TBlaBlubb;
  public
    constructor Create;
    destructor Destroy; override;
    property BlaBlubb: TBlaBlubb read FBlaBlubb write FBlaBlubb;
  end;

implementation

{ TMyClass }

constructor TMyClass.Create;
begin
  inherited;

  FBlaBlubb := nil;
end;

destructor TMyClass.Destroy;
begin
  FBlaBlubb.Free;

  inherited;
end;
Oder sind beide inherited-Aufrufe unnötig oder gar falsch? Oder nur einer von beiden?!?
  Mit Zitat antworten Zitat
Roachford
(Gast)

n/a Beiträge
 
#32

Re: Konstruktor Create Virtual oder nicht?

  Alt 23. Sep 2008, 08:46
Da die Destruktoren und Konstruktoren in TObject leer sind, benötigst du es nicht unbedingt. Aber damit hast du auch wieder einen möglichen Fehler geschaffen: Wenn du später mal zwischen TObject und deiner Klasse eine weitere Basisklasse dazwischenschiebst, dann werden deren Konstruktoren- und Destruktorenanweisungen nicht ausgeführt. Und das suchste denn ein paar Wochen nach der Deklaration der ersten Klasse vergeblich, warum das nicht klappt.

Der Speicher für die Instanz wird eh vor dem Konstruktoraufruf alloziiert, somit brauchst du nicht zu fürchten, dass die Instanz nicht komplett ist ohne den inherited Aufruf.

Im Endeffekt bist du mit dem inherited Aufruf auf der sicheren Seite.

BTW: Deine Initialisierung im Konstruktor ist nicht zwingend notwendig, da Member automatisch mit dem Ordinalwert 0 initialisiert werden, also nil, false, 0.0, 0, #0 und '' (wobei Strings eine kleine Ausnahme bilden).
  Mit Zitat antworten Zitat
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#33

Re: Konstruktor Create Virtual oder nicht?

  Alt 23. Sep 2008, 14:41
Zitat von Roachford:
Der Speicher für die Instanz wird eh vor dem Konstruktoraufruf alloziiert, somit brauchst du nicht zu fürchten, dass die Instanz nicht komplett ist ohne den inherited Aufruf.
Danke, dass du das nochmal explizit geschrieben hast, da war ich mir nämlich nicht so ganz sicher, wie sich das verhält.
Zitat von Roachford:
Im Endeffekt bist du mit dem inherited Aufruf auf der sicheren Seite.
Alles klar, dann werde ich das doch so beibehalten

Vielen Dank für deine Hilfe!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 06:21 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