![]() |
AW: Variable.Create;
Unabhängig davon wäre dennoch zumindest eine Warnung angebracht, wenn der Konstruktor einer nicht initialisiertern Variablen aufgerufen wird, wie Himi es eingangs glaube ich meinte. Es mag zwar einer statischen Methode ähneln, aber eine neu initialisierte ungültige Referenz bleibt eine ungültige Referenz.
|
AW: Variable.Create;
Zitat:
|
AW: Variable.Create;
Zitat:
Ich hoffe, von euch ist keiner auf die bescheuerte Idee gekommen, in Konstruktoren ungeprüft irgendwelche Unterobjekte zu erzeugen. Weil das würde dann ja zu Speicherlecks führen sobald man .Create aufruft :mrgreen: Also immer schön:
Delphi-Quellcode:
Oder irre ich mich da?
constructor TMyClass.Create();
begin inherited Create; //hierdurch wird der ursprüngliche Konstruktor aufgerufen if not Assigned(values) values = TStringList.Create(); if not Assigned(nodes) nodes = TObjectList.Create(); end; |
AW: Variable.Create;
Zitat:
|
AW: Variable.Create;
Zitat:
Zitat:
W1036 Variable 'Reg' might not have been initialized |
AW: Variable.Create;
Aber nur weil das Ding lokal deklariert worden ist? Zumindest kommt bei mir kein Hinweis bei Attributen oder globalen Variablen. :?
|
AW: Variable.Create;
Die sind ja auch initialisiert, da knallt es dann eben erst zur Laufzeit.
|
AW: Variable.Create;
Schade, das man das in Object Pascal das 'Create' als Methode vorgesehen und nicht einfach das 'New' erweitert hat. Dabei könnte man jegliche Instantiierungslogik (grauselig!) aus dem Konstruktor und in eine normale Methode verbannen.
Delphi-Quellcode:
Dann wäre auch gleich das Problem des Aufrufs virtueller Methoden im Konstruktor vom Tisch. Aber Objectpascal ist ja auch schon bald 30 Jahre alt und bei C# ist das Problem auch noch aktuell.
Var
a : TSomeClass; c : TClass; b : TSomeClassWithParametrizedConstructor; Begin new(a); assert (a is TSomeClass); new(a, TSomeDerivedClass); assert (a is TSomeClass); assert (a is TSomeDerivedClass); c := TSomeClass; new (a,c); assert (a is TSomeClass); new(b).MyCreateMethod(x,y,z); assert (b is TSomeClassWithParametrizedConstructor); |
AW: Variable.Create;
Zitat:
@Furtbichler: Bitte, werde kein Designer von Programmiersprachen. :stupid: Soweit ich sehen kann, würdest du mehrfache Konstruktoraufrufe weiterhin zulassen? Und die fehlende Variablenzuweisung macht den Code unintuitiv. |
AW: Variable.Create;
Mir gefällt die Syntax mit dem new().
Man weiß einfach, "das Objekt wird hier neu erzeugt" und muss das nicht umständlich über eine Zuweisung und den TClass.Create erledigen (vergisst man in der Eile ja auch nach Jahren nochmal ab und zu). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:47 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 by Thomas Breitkreuz