![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| cupper |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: 1 Всего: 1 |
Встретил в чужом коде непонятную мне логическую конструкцию
И озадачился сакральным смыслом того что перед удалением мапы, его копируют во временный мап, потом подчищаю оригинал. И После проводят корректное удаление указателей на Session через временно созданные map. |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
стандартная практика в асинхронном/многопоточном коде.
т.е. detach`имся от sessions_, в копии вызывается release() для каждого Session, и в тоже самое время, sessions_ может заполняться новыми Session`ами. Добавлено через 6 минут все равно странно то, почему никак не защищена операция копирования... если моя мысль верна. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
А что, там планировалось асинхронно вызванному деструктору выполнять еще какие-то операции над объектом?
Мало ли что, может результат copy-paste-а. У нас таких кодов столько, что если каждым озадачиваться... Это сообщение отредактировал(а) azesmcar - 1.6.2011, 08:12 |
|||
|
||||
| cupper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: 1 Всего: 1 |
в деструкторе О_о ? Дабы развеять все мифы, переменная session_ находится сугубо только в этом классе и на ружу не как не торчит. Наверно все таки это "кодоляп" (от "киноляп"). Решил подстраховаться от возможной своей глупости. Это сообщение отредактировал(а) cupper - 1.6.2011, 08:39 |
|||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
почему нет?
ну тогда хз.. |
||||
|
|||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
что в этом коде необычного?
http://liveworkspace.org/code/741dcee654ae...69bf5c96da8adad если опустить это:
вполне себе законный код, если предположить что объекты ClassX "живут" в каком-то контейнере обернутые в shared_ptr, и при необходимости "выбрасываются" из него. или что? |
||||
|
|||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
boostcoder
Разница в том, что в твоем коде объект не будет удаляться, пока с ним работают, так-как shared_ptr будет держать его в живом состоянии, пока поток на него ссылается, а значит работы с удаленном объектом здесь не будет, а если
то закончиться это как ни странно segmentation fault -ом. Это сообщение отредактировал(а) azesmcar - 1.6.2011, 09:54 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
оно и ясно. похоже не правильно поняли изначально друг-друга.. Добавлено через 2 минуты и 27 секунд но если sessions_ приватный, смысл создания копии в деструкторе все равно не понятен.. cupper, а друзей у него нет? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
кстати. очень "интересный" подход. я бы это сделал через swap - операция значительно быстрее, чем две (копирование и очистка).
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а держит ли _second_ ссылку/указатель на classX или SessionsMap?
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Скорее всего держит. Вполне стандартная ситуация, когда какие то объекты [Session] регистрируются (и дерегестрируются) в каком то менеджере [ClassX], и процесс дерегистрации запускается автоматом при удалении объекта [Session] и при этом производятся какие то нетривиальные действия в менеджере [ClassX]. Удаление скопом всего списка зарегистрированных объектов перед разрушением самого менеджера позволит не выполнять этих самых нетривиальных действий, а так же делать вид, что никаких объектов уже в менеджере нет (если эти самые Session при удалении полезут исследовать содержимое ClassX) |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |