![]() |
|
Модераторы: bsa |
![]()
|
|
| amnesiacorg |
|
||||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 2.9.2012 Репутация: нет Всего: нет |
Добрый день.
Изучаю С++ по книге Bruce Eckel "Thinking in C++". В десятой главе (Name Control) есть упражнение под номером 32:
Вот код: mirror.h:
one.cc:
two.cc
three.cc
и так далее, наконец five.cc:
Однако как бы я не менял порядок линковки, m5.test() все время возвращает true. (Порядок линковки файлов менял так: g++ five.o four.o three.o two.o one.o; Плюс пробовал указывать порядок инициализации с помощью __attribute__ ((init_priority (N)));) Однако никак не получилось заставить m5.test() вернуть false. Более того, я не совсем понимаю как этого можно добиться. Порядок инициализации глобальных переменных в разных единацах трансляции не определен (стандартом не определяется, в каком порядке она будет выполняться, т.е. будет one.cc раньше или позже two.cc). Однако точно говорится, что к моменту вызова main() инициализация всех глобальных обьектов будет закончена. Как в этом случае можно получить проблему static-init-fiasco, если мы не зависим от внутреннего состояния обьектов в момент их инициализации (нам необходимо только адрес этих переменных, а не их состояние)? |
||||||||||||
|
|||||||||||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Проблему можно получить тогда, когда один из конструкторов статических объектов пытается получить доступ к данным другого статического объекта. Обычно, данная проблема оканчивается крахом приложения еще до входа в main().
|
|||
|
||||
| amnesiacorg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 2.9.2012 Репутация: нет Всего: нет |
Т.е. можно считать что задача сформулирована не правильно, потому что порядок линковки в данном случае никак не будет влиять на результат Mirror::test() для обьекта m5?
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
amnesiacorg, да.
|
|||
|
||||
| amnesiacorg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 2.9.2012 Репутация: нет Всего: нет |
Спасибо.
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |