Порядок уничтожения
От: Аноним  
Дата: 19.01.09 10:49
Оценка:
Ситуация: Есть глобальная переменная, которая открывает файл для записи (пишутся трейсы)

Вопрос: Каков порядок уничтожения, после завершения main():
1. Неявно закрывается поток вывода ?
2. Вызывает десрукторы глобальных/статических объектов. ?

Если это так, то каким образом можно в деструкторе еще что то записать в файл? Переоткрыть поток еще раз ? Закроется ли он потом еще раз неявно ?

Заранее спасибо за помощь.
Re: Порядок уничтожения
От: Bell Россия  
Дата: 19.01.09 11:11
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Ситуация: Есть глобальная переменная, которая открывает файл для записи (пишутся трейсы)


А>Вопрос: Каков порядок уничтожения, после завершения main():


Порядок разрушения обратен порядку создания. Порядок создания глобальных объектов, определенных в разных единицах трансляции, не определен.
Существует несколько способов добится нужного тебе поведения, со своими плюсами и минусами. Поищи, например, "синглтон феникс", "счётчики Шварца".
Любите книгу — источник знаний (с) М.Горький
Re: Порядок уничтожения
От: Юрий Жмеренецкий ICQ 380412032
Дата: 19.01.09 12:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Ситуация: Есть глобальная переменная, которая открывает файл для записи (пишутся трейсы)


А>Вопрос: Каков порядок уничтожения, после завершения main():


А>1. Неявно закрывается поток вывода ?

А>2. Вызывает десрукторы глобальных/статических объектов. ?

В деструкторах глобальных/статических объектов можно использовать потоки ввода/вывода, они разрушаются позже(27.3/2).
Re[2]: Порядок уничтожения
От: Аноним  
Дата: 19.01.09 12:51
Оценка:
Здравствуйте, Юрий Жмеренецкий, Вы писали:

ЮЖ>Здравствуйте, Аноним, Вы писали:


А>>Ситуация: Есть глобальная переменная, которая открывает файл для записи (пишутся трейсы)


А>>Вопрос: Каков порядок уничтожения, после завершения main():


А>>1. Неявно закрывается поток вывода ?

А>>2. Вызывает десрукторы глобальных/статических объектов. ?

ЮЖ>В деструкторах глобальных/статических объектов можно использовать потоки ввода/вывода, они разрушаются позже(27.3/2).


В 27.3/2 речь идет о стандартных потоках ввода вывода stdout. А как обстоит дело с файловыми потоками ? Можно ли его переоткрыть в деструкторе и кто будет потом его неявно закрывать?
Re[3]: Порядок уничтожения
От: Юрий Жмеренецкий ICQ 380412032
Дата: 19.01.09 13:39
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Юрий Жмеренецкий, Вы писали:


ЮЖ>>Здравствуйте, Аноним, Вы писали:


А>>>Ситуация: Есть глобальная переменная, которая открывает файл для записи (пишутся трейсы)


А>>>Вопрос: Каков порядок уничтожения, после завершения main():


А>>>1. Неявно закрывается поток вывода ?

А>>>2. Вызывает десрукторы глобальных/статических объектов. ?

ЮЖ>>В деструкторах глобальных/статических объектов можно использовать потоки ввода/вывода, они разрушаются позже(27.3/2).


А>В 27.3/2 речь идет о стандартных потоках ввода вывода stdout.

Теперь ясно, не сразу понял что 'файл для записи' == 'поток вывода'

А>А как обстоит дело с файловыми потоками ? Можно ли его переоткрыть в деструкторе и кто будет потом его неявно закрывать?

Никто не будет закрывать. Можно посмотреть в сторону atexit(3.6.3/3, 18.3/8).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.