Форум сайта python.su
:) не надо, а то любители clr начнут ехидно тыкать в нас пальцами.
Офлайн
Ну в самом деле, как это назвать - одна функция нормально значение возвращает, а другая почти такая же из того же буста - нет? С одной стороны, очень хочется назвать это глюком буста, с другой стороны - ну не может в популярном продукте быть такой чудовищный глюк, тем паче при столь скудных упоминаниях.
Офлайн
Даже всемогущий Roman Yakovenko не смог дать правильный ответ. http://mail.python.org/pipermail/cplusplus-sig/2008-July/013419.html Также в документации говорится об некоем параметре DerivedPolicies http://www.boost.org/doc/libs/1_47_0/libs/python/doc/v2/indexing.html#indexing_suite , но как его применять (и поможет ли он) - я так и не понял. Единственное, что я понял - return_value_policy<reference_existing_object>() на этом месте не прокатывает.
Офлайн
Послание к потомкам. Коли вы откопаете сию тему, скажем, через год или пять лет, и так окажется, что вы знаете правильный ответ на один или более поставленных вопросов - ради всего святого, приведите его здесь! Родина вас не забудет.
Офлайн
Правильный ответ: если вам нужны указатели — используйте вместо них smart pointers. Это если коротко
Офлайн
А ежели чуть менее коротко?
Офлайн
На минуту забудем об указателях.
Есть у меня один класс. И на его обёртке буст с неизбежностью рисовал мне ошибку на добрых два экрана. Я долго думал, в чём может быть дело. А дело оказалась в, не побоюсь этого слова, членах оного класса, имеющих тип ofstream. Закомментировал их - стало компилиться (хотя, конечно, толку от такой компиляции чуть). Что характерно, ошибка рисуется прямо на самом определении class_ (точнее, в конце его), даже ежели все питоновские определения членов закомментировать. Заменил офстрим на указатель (глупый) - всё стало хорошо.
Офлайн
Так чего вы хотите - стримы содержат защищенный оператор присваивания, они очень специфичные поэтому и получаете кучу ошибок.
Офлайн
Обнаружил совершенно чудовищную вещь. Когда я запускаю второй экземпляр моей программы, то первый экземпляр падает! Никаких грязных хаков не использовал, мамой клянусь. Сначала грешил на pyqt, но попробовал без такового - тот же эффект. Пишет “ошибка сегментирования” или “ошибка шины” в зависимости от воли случая.
Кто виноват и что делать?
Отредактировано (Авг. 27, 2011 18:51:12)
Офлайн
1 Если грязных хаков нет, то я бы в первую очередь проверил использование файлов портов и т.п. Те тех мест в которых процессы могут взаимодействовать.
2 Если ждете помощи - покажите простенький пример того, что у вас падает.
3 Насколько я понял, вы много используете указатели, это нормально, но стоит всетаки ппопробовать использовать boost::shared_ptr и прочие указатели из boost как посоветовал Андрей. На производительности вы почти не потеряете, а надежность возрастет значительно. Их полезно использовать потому, что при переписывании надо выбрать какой тип умных указателей использовать, поэтому начинаешь себе отдавать отчет в каком режиме используется указатель.
4 Если эффект не стабилен (те не всегда происходит падение) то скорее всего используется неинициализированная переменная для индексации или что-то подобное - обычные С приключения - сделайте максимальные warnings натравите внешний инструментарий для проверки кода на глупости, добейтесь чтобы не было предупреждений.
Отредактировано (Авг. 27, 2011 19:20:52)
Офлайн