Article View: de.comp.lang.c++
Article #272Re: F: Darf man das?
From: Michael Mauch
Date: Thu, 17 Aug 1995 17:27
Date: Thu, 17 Aug 1995 17:27
47 lines
2047 bytes
2047 bytes
On Tue, 15 Aug 95 23:22:58 +0200, Heiko Zschernitz wrote:
>class B
>{
> int x;
>public:
> B(){};
> TuWas() { x = 1; }
>};
>A a;
>B b;
>A::A()
>{ b.TuWas();
>}
>Das sollte meiner Meinung nach aber ebenfalls funktionieren, weil das
>Objekt b statisch erzeugt wird. Dann ist der Speicher ja bereits vorhanden
>und die Adresse bekannt, wenn b.TuWas() aufgerufen wird.
>Uebrigens sollte man sich nicht darauf verlassen, dass die Konstruktoren
>von a und b in dieser Reihenfolge aufgerufen werden. Je nach verwendetem
>Compiler/Linker kann die Reihenfolge der Initialisierung von statischen
>Objekten variieren (vermute ich).
Volle Zustimmung: die statischen Objekte werden vom Compiler/Linker "je nach
Laune" irgendwann vor dem Aufruf von main() initialisiert. Wenn ein Programm aus
mehreren Modulen (.OBJ-Dateien unter DOS) besteht, kann es passieren, dass das
Programm einmal laeuft und einmal nicht, je nach der Reihenfolge, in der man die
Module dem Linker vorsetzt.
Beispiel-Katastrophe:
Zum Debuggen setzt man sich einen statischen Stream in eines der Module:
ofstream Log("alles.log");
In verschiedenen Modulen verteilt man dann jede Menge statische Objekte, deren
Konstruktoren froehlich in den Log-Stream schreiben. Mit etwas "Glueck" schafft
man es dann, dass das Programm laeuft. Wenn man dann die Anordnung der
OBJ-Dateien beim Aufruf des Linkers etwas veraendert, semmelt das Programm
gnadenlos ab ("komisch, komisch, ich hab doch gar nichts veraendert?!").
Tschuess...
Michael
Technical Details
Message-ID:
<40vu71$h3f@h20-hrze.uni-duisburg.de>Path:
arc1-ca.pugleaf.net!uni-duisburg.de!newsReferences:
<5ruTxMFqwPB@0otter.link-goe.zerberus.de> <ipTMwAmIBh107h@andurg.hb.north.de>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!uni-duisburg.de!news From: mauch@uni-duisburg.de (Michael Mauch) Newsgroups: de.comp.lang.c++ Subject: Re: F: Darf man das? Date: Thu, 17 Aug 1995 19:27:37 +0200 Organization: Gerhard-Mercator-Universitaet -GH- Duisburg Message-ID: <40vu71$h3f@h20-hrze.uni-duisburg.de> References: <5ruTxMFqwPB@0otter.link-goe.zerberus.de> <ipTMwAmIBh107h@andurg.hb.north.de> Reply-To: mauch@uni-duisburg.de NNTP-Posting-Host: slip12.uni-duisburg.de X-Newsreader: Forte Free Agent 1.0.82