![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
Проверял под студией и QtCreator. Mingw прожевал, а вот студийный компиль (2008) вывалился в рантайме: "не обработанное исключение".
А мне нужно поддерживать с ним совместимость. В чем здесь может быть причина проблемы? //CTest.h Код:
//CTest.cpp Код:
//main.cpp Код:
Если модифицировать глобальный объект не в конструкторе, а в методе - проблем нет. Есть подозрение, что это может быть связанно как то с "неопределенным порядком инициализации единиц трансляции". Но вот в чем на самом деле собака зарыта? И можно ли это как нибудь вылечить? |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
![]()
Совершенно верно, причина падения - "неопределённый порядок инициализации единиц трансляции". gcc тоже падать должен, если порядок файлов-исходников поменять (поставить main.cpp первым). Каких-нибудь извращений понапридумывать можно, но лучше подыскать другой способ реализации задуманного, так как это будет всё равно компиляторо-зависимо и небезопасно, без каких-либо гарантий.
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
А почему std::vector не ломается при аналогичном использовании?
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
![]()
_Bers
Но вот в чем на самом деле собака зарыта? C++ std, 3.6.2 И можно ли это как нибудь вылечить? Паттерн Singleton А почему std::vector не ломается при аналогичном использовании? У него более светлая карма oO
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
![]() |
![]() |
![]() |
#5 |
В прострации
Форумчанин
Регистрация: 13.01.2009
Сообщений: 239
|
![]()
Может попробовать вставку с помощью gMap.insert?
Пол-жизни сидючи, в монитор глядючи...
![]() |
![]() |
![]() |
![]() |
#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. |
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
Это я уже как бэ понял. Теперь хочу понять, как сделать безопасный код.
В настоящий момент конфликт разрешен за счет механизма, применяемого в "классическом одиночке". Однако, задача одиночки - гарантировать единственность объекта. В его задачи не входит разрешать конфликты глобальных/статических данных. С одной стороны, использование одиночки не по назначению ухудшает комфортность написания кода и сопровождения. А с другой... std::vector, std::list, стримы (std::cout/std::cin) не являются одиночками, однако, никаких сложностей с "глобальностью" не испытывают. Есть предположение, что строение этого класса имеет защиту от подобных проблем. И если понять принцип её действия, то можно будет писать безопасный код. |
![]() |
![]() |
![]() |
#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. |
||
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
вывел ноль
|
![]() |
![]() |
![]() |
#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 |