![]() |
|
|
![]()
|
|
| _GRIN_ |
|
||||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
Вообщем то если вдуматься в то, что такое QList и другие shared classes в Qt, то всё вроде правильно, но сначала поведение следующего алгоритма меня удивили =)
Решил выложить, может ещё кто наткнётся =)
вывод
Сначала было неожидано, что изменилось значение во втором списке (а как же copy-on-write) - но затем всё встало на свои места =) -------------------- Дорогу осилит идущий |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
_GRIN_, а если строки 7 и 8 местами поменять, все нормально будет?
|
|||
|
||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 2 Всего: 10 |
логично, стремновато правда както выглядит, типа доступ к элементам только методами самого листа
|
|||
|
||||
| _GRIN_ |
|
||||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
Да, ты абсолютно прав. =) Вообщем я тут слегка тест допилил, что бы было нагляднее.
Вот лог:
В принципе я так думаю, что это всё-таки баг. Положил в багтреккер https://bugreports.qt-project.org/browse/QTBUG-24215 Это сообщение отредактировал(а) _GRIN_ - 10.2.2012, 07:56 -------------------- Дорогу осилит идущий |
||||
|
|||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
_GRIN_, не знаю, видел ты или нет, но в багтрекере код выглядит вот так
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Если полученный указатель на элемент не использовать сразу, можно в определённых случаях получить обращение к недействительной памяти и вылет программы (возможно, не сразу, а в непонятном месте)
|
|||
|
||||
| _GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
borisbn, видел - я там файл main.cpp приатачил.
math64, это понятно, но суть в другом - copy-on-write работает не всегда. -------------------- Дорогу осилит идущий |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 7 Всего: 250 |
COW не волшебство и работает только когда его "просят", а именно при неконстантном обращении к объекту.. В примере применение оператора[] происходит до какого нибудь дублирования списка, а соответсвенно "отпочковывать" просто нечего.. А когда уже есть, то нет повода (применения []) Добавлено через 3 минуты и 55 секунд кстати попробуйте вставить между восьмой и 9 строчкой еще раз получение ссылки первого списка.. тогда первая ссылка (первого списка) будет менять только у второго списка Это сообщение отредактировал(а) mes - 10.2.2012, 09:34 |
|||
|
||||
| _GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
mes, ты абсолютно прав =)
Я тока собирался написать, а ты уже =) Не баг это (на багтрекере повинился) - просто тонкий момент, о котором не стоит забывать. "Implicit sharing automatically detaches the object from a shared block if the object is about to change and the reference count is greater than one." -------------------- Дорогу осилит идущий |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |