![]() |
|
![]() ![]() ![]() |
|
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
недавно столкнулся с одной загадкой в двух проявлениях :
1.
2.
Обе описанные ситуации были получены на компиляторе MinGW (других не пробовал) но установленные на разных компах давали разные результаты (скачивались с одного и того же сайта но в разное время - так что вполне могут быть разные по обновлению) Вопрос: как тогда правильно использовать функции возврашаюшиее ссылки на статические обьекты, чтоб избежать такого непредсказуемого поведения Заранее спасибо. Это сообщение отредактировал(а) mes - 17.6.2008, 11:47 |
||||
|
|||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: нет Всего: 25 |
есди этот код был в ашнике, то можент быть, создавались 2 реализацции функции GetWMap, и, соответственно, 2 статические переменные? |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: нет Всего: 154 |
я понял что имеет место что-то вроде этого
![]()
ошибка может возникнуть из-за того, что порядок создания переменных не определен, если сначала создан объект form, потом static_a, ну а потом static B b;, то удаляться они будут в обратном порядке.. |
|||
|
||||
UnrealMan |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: нет Всего: 32 |
В программе, где не допускается undefined behavior (легко сказать ![]()
С какой стати? |
||||
|
|||||
mes |
|
||||||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
нет.. двух перемнных не создавалось - возврашалась невалидная ссылка
нет.. открытых ( не обернутых в функцию) не было весь код выглядит примерно так:
Добавлено @ 12:32 названния функций условны.. но места вызовов сохранены Это сообщение отредактировал(а) mes - 17.6.2008, 12:44 |
||||||||
|
|||||||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: нет Всего: 25 |
я только предположил, ибо не знаю к примеру из-за того, что каждый cpp компилится в свой obj а как поступает компилер, когда видит код одной и той же функции в 2х cpp (и видит ли вообще) я не знаю. а может это вообще проблемы линковщика, подставить один и тот же адрес в 2 obj при их обработке |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: нет Всего: 154 |
возможно нет такого ключа... вот и вылетает может сделать WMap членом класса? |
|||
|
||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: нет Всего: 32 |
Это inline-функция, с ней должен разобраться линкер - он оставит только одну функцию, которая во всех единицах трансляции будет одной и той же. Но, в принципе, тут могут быть косяки, можно попробовать пересобрать весь проект. |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: нет Всего: 154 |
||||
|
||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: нет Всего: 32 |
||||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: нет Всего: 154 |
использование одной статической переменной в деструкторе другой статической переменной ни разу не полезно ![]() |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
||||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: нет Всего: 154 |
mes, поставь в деструктор класса A брейкпоинт и проверь, кто раньше удаляется...
|
|||
|
||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: нет Всего: 32 |
У паттерна "синглтон" много реализаций. Синглтон Мейерса базируется на тех же статических переменных, и проблемы у него будут те же самые ![]() Это сообщение отредактировал(а) UnrealMan - 17.6.2008, 12:56 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
||||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | GNU toolchain | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |