Desidero sapere se le funzioni registrate con atexit()
vengono chiamate prima o dopo che le variabili globali sono state distrutte. Questo è specificato dallo standard o dall'implementazione definita?Quando è una funzione registrata con atexit() chiamata
risposta
E 'ben definito, e dipende dal fatto che l'oggetto in questione è stato costruito prima o dopo la funzione ottenuto registrata utilizzando atexit()
:
3.6.3 Terminazione
3. Se il completamento dell'inizializzazione di un oggetto con durata dell'archiviazione statica viene sequenziato prima di una chiamata a
std::atexit
(vedere<cstdlib>
, 18,5), la chiamata alla funzione passata astd::atexit
viene eseguita prima della c tutto al distruttore per l'oggetto. Se una chiamata astd::atexit
viene eseguita in sequenza prima del completamento dell'inizializzazione di un oggetto con durata di archiviazione statica, la chiamata al distruttore per l'oggetto viene sequenziata prima che la chiamata alla funzione passata astd::atexit
. Se una chiamata astd::atexit
viene sequenziata prima di un'altra chiamata astd::atexit
, la chiamata alla funzione passata alla seconda chiamatastd::atexit
viene sequenziata prima che la chiamata alla funzione passata alla prima chiamatastd::atexit
. interpretazione
mio laico di quanto sopra è quella roba che ha ottenuto costruita prima chiamato atexit(handler)
viene distrutta dopohandler()
si chiama, e viceversa. Sono sicuro che ci sono sottigliezze, ma questo sembra essere il principio di base.
- 1. Ottenere lo stato di uscita da all'interno di una funzione registrata con atexit()
- 2. Sinon spia su console.log chiamata non registrata
- 3. WSACleanup e atExit
- 4. Come rilevare una funzione JavaScript con una determinata firma è stata registrata?
- 5. Freeing in atexit()
- 6. estraendo una chiamata nome funzione da una funzione chiamata
- 7. Safe Lua invoca la funzione registrata C++
- 8. atexit, exit delegate in C#
- 9. Quando RequireJS 'richiede una chiamata asincrona? Quando è sincrono?
- 10. Come richiamare un evento automaticamente quando viene chiamata una funzione?
- 11. Quando dovrei std :: inoltrare una chiamata di funzione?
- 12. "Il simbolo nascosto 'atexit' è referenziato da DSO" quando si utilizza libtool con gcov
- 13. Posso annullare o rimuovere un comando atexit?
- 14. La chiamata della funzione Dll è più veloce di una normale chiamata di funzione?
- 15. Python - Esiste una funzione che viene chiamata quando un oggetto non implementa una funzione?
- 16. Test dell'unità Clojure: Verifica se una funzione è stata chiamata
- 17. Qual è il significato di "()" in una chiamata di funzione?
- 18. Quando una funzione generica non è generica?
- 19. Perché la funzione curry è chiamata curry?
- 20. Javascript ottenere l'elemento dom una funzione è stata chiamata da
- 21. problema con la chiamata di una funzione javascript due volte
- 22. Prendi il comando di lua quando una funzione c è chiamata
- 23. Come verificare se una DLL COM è registrata in C#
- 24. Chiamata di una funzione prima di Load
- 25. Creare una funzione con variabili di chiamata opzionali
- 26. Quando è utile una chiamata al metodo parametrizzata?
- 27. Condizione con una chiamata di funzione in PowerShell
- 28. C# Chiamata di una funzione con più valori
- 29. L'estensione SQLAlchemy non è registrata quando si esegue l'app con Gunicorn
- 30. Chiamata asincrona Tornado a una funzione
Fondamentalmente sì. La formulazione dello standard è più complicata perché in un programma multithreading, "before" e "after" hanno definizioni complicate e non sempre si comportano come ci si aspetterebbe. – aschepler
Con una nota che 'built' significa * il costruttore terminato * e che consideriamo solo oggetti completi, non basi o attributi. –