Après la compilation de C++ fichier (avec un objet statique global) je reçois dans nm
sortie cette fonction:g ++ __static_initialization_and_destruction_0 (int, int) - quel est-il
00000000 t _Z41__static_initialization_and_destruction_0ii
__static_initialization_and_destruction_0(int, int) /* after c++filt */
Qu'est-ce? Il appellera __cxa_atexit()
Puis-je désactiver la génération de cette fonction (et appeler un __cxa_atexit()
) et de mettre tous les appels de constructeur et destructor aux articles .ctors
et .dtors
?
g ++ possède une option de ligne de commande '-fno-use-cxa-atexit' mais je ne pense pas que cela puisse vous aider. On dirait que ça fait seulement que 'atexit()' est utilisé à la place de 'cxa_atexit()'. Peut-être la meilleure question à se poser est pourquoi g ++ génère '__static_initialization_and_destruction_0()' pour commencer au lieu de placer les appels constructor et destructor dans les sections ELF '.ctors' et' .dtors'. On peut supposer qu'il y a une bonne raison à cela. – Void