![]() |
AW: Variable.Create;
Warnung ok, ich denke jeder hat schonmal ausversehen die Zuweisung vergessen. Fehler aber definitiv nicht!
Konstrukte wie:
Delphi-Quellcode:
würden dann wohl auch nicht mehr funktionieren.
with TBitmap.Create do
try LoadFromFile(''); finally Free; end; |
AW: Variable.Create;
Gibt imho wichtigeres, als die Sprache idiotensicher zu machen... :roll:
|
AW: Variable.Create;
Zitat:
Delphi-Quellcode:
und nicht
new(a)
Delphi-Quellcode:
;-)
a:=new()
Und bezüglich der Vermeidung eines mehrfachen Konstruktoraufrufes könnte man ja im 'new' prüfen, die Referenz 'a' nil ist und ggf (Compilerswitch) eine Exception werfen ('Possible overwrite of an instantiated object'). Wäre auch nicht doof. Zitat:
|
AW: Variable.Create;
Zitat:
Der Compiler macht intern doch sowas draus:
Delphi-Quellcode:
AutomatischGenerierteLokaleVariable1 := TBitmap.Create;
try AutomatischGenerierteLokaleVariable1.LoadFromFile(''); finally AutomatischGenerierteLokaleVariable1.Free; end; [edit] Upss, du meinst den String? Joar, das wird schwieriger. Es gibt doch jetzt diese Attribute. Darüber könnte man auch Anweisungen für den Compiler generieren, aber das wäre nur "halb" sinnvoll, da der dann nur Konstanten und keine Variablen auswerten könnte. Wenn, dann wäre es besser, wenn man, so wie bei der Index- oder Bereichsprüfung eine Codegenerierung aktivieren könnte, welche beim Programmablauf eine Parameterprüfung entsprechend der Attribute durchführen würde. Allerdings wäre es wohl besser, wenn solche Sachen endlich mal standardmäßig aktiv sind, im Debug-Profil, und man sie geziehlt deaktivieren muß, wenn man Diese nicht will. |
AW: Variable.Create;
Zitat:
Delphi-Quellcode:
und
New
Delphi-Quellcode:
funktioniert nunmal so ähnlich... wenn auch nur für
Dispose
Delphi-Quellcode:
:
object
Delphi-Quellcode:
program tobjectcstr;
type TTest = object constructor Create(a, b: Integer); constructor Create(s: String); destructor Destroy; end; PTest = ^TTest; constructor TTest.Create(a, b: Integer); begin Writeln('Called constructor with ', a, ' & ', b); end; constructor TTest.Create(s: String); begin Writeln('Called constructor with ', s); end; destructor TTest.Destroy; begin Writeln('Called destructor'); end; var t: PTest; begin t := New(PTest, Create(42, 12)); Dispose(t, Destroy); New(t, Create('Hello World')); Dispose(t, Destroy); end.
Code:
(Ich habe jedoch nicht getestet, ob Delphi das auch ohne Probleme schluckt...)
$ fpc tobjectcstr.pas
Free Pascal Compiler version 2.6.2 [2013/02/16] for i386 Copyright (c) 1993-2012 by Florian Klaempfl and others Target OS: Linux for i386 Compiling tobjectcstr.pas Linking tobjectcstr /usr/bin/ld: warning: testoutput/link.res contains output sections; did you forget -T? 33 lines compiled, 0.2 sec $ ./tobjectcstr Called constructor with 42 & 12 Called destructor Called constructor with Hello World Called destructor Gruß, Sven |
AW: Variable.Create;
Zitat:
Und Pascal (bzw Delphi) ist schon lang keine Lehrsprache mehr. |
AW: Variable.Create;
Zitat:
|
AW: Variable.Create;
Gerade durch Zufall entdeckt:
![]() Zitat:
|
AW: Variable.Create;
Zitat:
|
AW: Variable.Create;
Stimmt, hab ich dann auch gemerkt, verwirrend sieht es aber allemal aus.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 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