|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.06.2012, 03:30 | #1 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
как подружить std::map и глобальные объекты
Проверял под студией и QtCreator. Mingw прожевал, а вот студийный компиль (2008) вывалился в рантайме: "не обработанное исключение".
А мне нужно поддерживать с ним совместимость. В чем здесь может быть причина проблемы? //CTest.h Код:
//CTest.cpp Код:
//main.cpp Код:
Если модифицировать глобальный объект не в конструкторе, а в методе - проблем нет. Есть подозрение, что это может быть связанно как то с "неопределенным порядком инициализации единиц трансляции". Но вот в чем на самом деле собака зарыта? И можно ли это как нибудь вылечить? |
27.06.2012, 03:56 | #2 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Совершенно верно, причина падения - "неопределённый порядок инициализации единиц трансляции". gcc тоже падать должен, если порядок файлов-исходников поменять (поставить main.cpp первым). Каких-нибудь извращений понапридумывать можно, но лучше подыскать другой способ реализации задуманного, так как это будет всё равно компиляторо-зависимо и небезопасно, без каких-либо гарантий.
|
27.06.2012, 09:06 | #3 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
А почему std::vector не ломается при аналогичном использовании?
|
27.06.2012, 10:44 | #4 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
_Bers
Но вот в чем на самом деле собака зарыта? C++ std, 3.6.2 И можно ли это как нибудь вылечить? Паттерн Singleton А почему std::vector не ломается при аналогичном использовании? У него более светлая карма oO
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
27.06.2012, 11:15 | #5 |
В прострации
Форумчанин
Регистрация: 13.01.2009
Сообщений: 239
|
Может попробовать вставку с помощью gMap.insert?
Пол-жизни сидючи, в монитор глядючи...
|
27.06.2012, 13:01 | #6 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2_Bers
как вариант, инициализировать мап раньше (точнее, отложить инициализацию). Код:
Код:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance Последний раз редактировалось pproger; 27.06.2012 в 21:47. |
27.06.2012, 19:48 | #7 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Это я уже как бэ понял. Теперь хочу понять, как сделать безопасный код.
В настоящий момент конфликт разрешен за счет механизма, применяемого в "классическом одиночке". Однако, задача одиночки - гарантировать единственность объекта. В его задачи не входит разрешать конфликты глобальных/статических данных. С одной стороны, использование одиночки не по назначению ухудшает комфортность написания кода и сопровождения. А с другой... std::vector, std::list, стримы (std::cout/std::cin) не являются одиночками, однако, никаких сложностей с "глобальностью" не испытывают. Есть предположение, что строение этого класса имеет защиту от подобных проблем. И если понять принцип её действия, то можно будет писать безопасный код. |
27.06.2012, 21:01 | #8 | ||
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2_Bers
Цитата:
A.h Код:
Код:
Код:
пс. да, если компилять конечно как g++ A.cpp main3.cpp (т.е чтоб A.cpp был первым) Цитата:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance Последний раз редактировалось pproger; 27.06.2012 в 21:07. |
||
27.06.2012, 21:06 | #9 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
вывел ноль
|
27.06.2012, 21:08 | #10 | |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2_Bers
Цитата:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как подружить Ribbon и Alpha Controls | artemavd | Компоненты Delphi | 0 | 17.06.2012 17:44 |
Как грамотно подружить Firebird и Interbase на 1 ПК? | Alexei91 | БД в Delphi | 3 | 20.08.2010 13:29 |
Исключение при удалении из std::map | arokot | Общие вопросы C/C++ | 2 | 11.08.2010 17:36 |
сортировка std::map | NiCola999 | Общие вопросы C/C++ | 2 | 27.04.2010 23:14 |
Как подружить SendMessage и TIdHTTP | zcoder | Работа с сетью в Delphi | 1 | 13.04.2009 06:01 |