Zastanawiam które mogą pewny porządek między zniszczeniem obiektu globalnego i atexit
w C++Zamówienie między zniszczeniem obiektu globalnego i atexit w C++
mam globalnego obiektu i zarejestrować atexit
funkcja jak poniżej:
static MyClass g_class;
void onExit()
{
// do some destruction
}
int main()
{
atexit(onExit);
return 0;
}
Znalazłem onExit()
jest wywoływany przed MyClass::~MyClass()
w Visual Studio 2012 i gcc4.7.2. Czy jestem pewien, że onExit
jest zawsze wywoływana przed zniszczeniem obiektu globalnego (takiego jak g_class
)?
Zastanawiam się, czy w porządku rejestrów obiektów globalnych i atexit
stosuje się tę samą tabelę zamówień. Czy nie ma związku między zamówieniem obiektu globalnego a zamówieniem atexit
?
Edytowany: Przepraszamy, napisałem błąd. Jestem zdezorientowany podczas porządkowania przykładowego kodu. onExit()
jest wywoływana przed ~ MyClass().
Podejrzewam, że zamówienie nie jest w 100% pewne. Dlaczego się przejmujesz? –
Utwórz nowy obiekt globalny przed 'MyClass' i wywołaj' atexit (onExit) 'w jego konstruktorze do sprawdzenia. – lapk
Chcesz kontrolować czas życia obiektów, używaj dynamicznych. – PiotrNycz