🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #272

Re: F: Darf man das?

#272
From: Michael Mauch
Date: Thu, 17 Aug 1995 17:27
47 lines
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!news
References: <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