Ситуация: Есть глобальная переменная, которая открывает файл для записи (пишутся трейсы)
Вопрос: Каков порядок уничтожения, после завершения main():
1. Неявно закрывается поток вывода ?
2. Вызывает десрукторы глобальных/статических объектов. ?
Если это так, то каким образом можно в деструкторе еще что то записать в файл? Переоткрыть поток еще раз ? Закроется ли он потом еще раз неявно ?
Здравствуйте, Аноним, Вы писали:
А>Ситуация: Есть глобальная переменная, которая открывает файл для записи (пишутся трейсы)
А>Вопрос: Каков порядок уничтожения, после завершения main():
Порядок разрушения обратен порядку создания. Порядок создания глобальных объектов, определенных в разных единицах трансляции, не определен.
Существует несколько способов добится нужного тебе поведения, со своими плюсами и минусами. Поищи, например, "синглтон феникс", "счётчики Шварца".
Здравствуйте, Аноним, Вы писали:
А>Ситуация: Есть глобальная переменная, которая открывает файл для записи (пишутся трейсы)
А>Вопрос: Каков порядок уничтожения, после завершения main():
А>1. Неявно закрывается поток вывода ? А>2. Вызывает десрукторы глобальных/статических объектов. ?
В деструкторах глобальных/статических объектов можно использовать потоки ввода/вывода, они разрушаются позже(27.3/2).
Re[2]: Порядок уничтожения
От:
Аноним
Дата:
19.01.09 12:51
Оценка:
Здравствуйте, Юрий Жмеренецкий, Вы писали:
ЮЖ>Здравствуйте, Аноним, Вы писали:
А>>Ситуация: Есть глобальная переменная, которая открывает файл для записи (пишутся трейсы)
А>>Вопрос: Каков порядок уничтожения, после завершения main():
А>>1. Неявно закрывается поток вывода ? А>>2. Вызывает десрукторы глобальных/статических объектов. ?
ЮЖ>В деструкторах глобальных/статических объектов можно использовать потоки ввода/вывода, они разрушаются позже(27.3/2).
В 27.3/2 речь идет о стандартных потоках ввода вывода stdout. А как обстоит дело с файловыми потоками ? Можно ли его переоткрыть в деструкторе и кто будет потом его неявно закрывать?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Юрий Жмеренецкий, Вы писали:
ЮЖ>>Здравствуйте, Аноним, Вы писали:
А>>>Ситуация: Есть глобальная переменная, которая открывает файл для записи (пишутся трейсы)
А>>>Вопрос: Каков порядок уничтожения, после завершения main():
А>>>1. Неявно закрывается поток вывода ? А>>>2. Вызывает десрукторы глобальных/статических объектов. ?
ЮЖ>>В деструкторах глобальных/статических объектов можно использовать потоки ввода/вывода, они разрушаются позже(27.3/2).
А>В 27.3/2 речь идет о стандартных потоках ввода вывода stdout.
Теперь ясно, не сразу понял что 'файл для записи' == 'поток вывода'
А>А как обстоит дело с файловыми потоками ? Можно ли его переоткрыть в деструкторе и кто будет потом его неявно закрывать?
Никто не будет закрывать. Можно посмотреть в сторону atexit(3.6.3/3, 18.3/8).