C++ — Änderungen 1794 → 1897

Zeile 31: Zeile 31:
 
== g++ ==
 
== g++ ==
  
−
Die Konstruktion der globalen/statischen Objekte ist unter g++ immer gleich. Nur die Destruktion der selben hängt von der Verwendung des configure-flags --enable-__cxa_atexit ab.
+
Die Konstruktion der globalen/statischen Objekte ist unter g++ immer gleich. Nur die Destruktion der selben hängt von der Verwendung des configure-flags --enable-__cxa_atexit und vom Kommandozeilenparameter -fuse-cxa-atexit ab.
  
 
=== Konstruktoren ===
 
=== Konstruktoren ===
Zeile 37: Zeile 37:
 
G++ erstellt eine "ctors*" Sektion, welche ein Array aus Funktionszeigern ist. Diese Funktionszeiger zeigen jeweils auf einen Konstruktor. Man muss nun nur dieses Array durchgehen und alle Funktionen aufrufen und schon hat man alle globalen/statischen Objekte initialisiert.
 
G++ erstellt eine "ctors*" Sektion, welche ein Array aus Funktionszeigern ist. Diese Funktionszeiger zeigen jeweils auf einen Konstruktor. Man muss nun nur dieses Array durchgehen und alle Funktionen aufrufen und schon hat man alle globalen/statischen Objekte initialisiert.
  
−
=== Destruktoren (ohne --enable-__cxa_atexit) ===
+
=== Destruktoren (ohne --enable-__cxa_atexit und ohne -fuse-cxa-atexit) ===
  
 
G++ erstellt eine "dtors*" Sektion, analog zur "ctors*" Sektion und speicher dort wiederum ein Array aus Funktionszeigern. Diesmal zeigen diese Funktionszeiger aber auf Destruktoren.
 
G++ erstellt eine "dtors*" Sektion, analog zur "ctors*" Sektion und speicher dort wiederum ein Array aus Funktionszeigern. Diesmal zeigen diese Funktionszeiger aber auf Destruktoren.
  
−
=== Destruktoren (mit --enable-__cxa_atexit) ===
+
=== Destruktoren (mit --enable-__cxa_atexit oder mit -fuse-cxa-atexit) ===
  
 
Im Konstruktor eines globalen/statischen Objekts wird die folgende Funktion aufgerufen:
 
Im Konstruktor eines globalen/statischen Objekts wird die folgende Funktion aufgerufen: