вставка QVector в другой QVector |
Здравствуйте, гость ( Вход | Регистрация )
вставка QVector в другой QVector |
Авварон |
12.2.2013, 12:24
Сообщение
#11
|
Студент Группа: Участник Сообщений: 99 Регистрация: 26.4.2009 Пользователь №: 709 Спасибо сказали: 14 раз(а) Репутация: 0 |
Вы абсолютно не поняли, что я сказал.
|
|
|
Алексей1153 |
12.2.2013, 12:27
Сообщение
#12
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
я прочитал ещё раз. Вроде всё понял
|
|
|
ilyabvt |
12.2.2013, 19:11
Сообщение
#13
|
Активный участник Группа: Участник Сообщений: 297 Регистрация: 23.6.2011 Пользователь №: 2765 Спасибо сказали: 45 раз(а) Репутация: 3 |
Цитата С стд::вектором можно напороться на весьма и весьма веселые вещи - например меммув сделан чуть по другому - и на винде все летает, а на маке проседает на меммуве Каким боком связаны vector и memmove? Цитата "стандартные и проверенные" std::vector различаются от компилятора к компилятору Как и вся стандартная библиотека. Штука в том что если даже код разный, то действует он по одному принципу (если конечно соответствует стандарту). Если не использовать лопату как молоток, то различий, кроме как в скорости работы (на которую влияет еще куча других факторов), не должно быть Цитата Ну если вам нравится наступать на грабли с утечками памяти, вместо чтоб юзать COW и не париться, не могу вам запретить
Где тут может быть утечка памяти? При вызове функции память не выделяется, "утекать" нечему. Не считая конечно памяти под ссылку которая сама освободиться. Цитата стал быть QVector от компилятора к компилятору не различается ? Вообще-то нет. Он может разниться только между разными версиями Qt. Сообщение отредактировал ilyabvt - 12.2.2013, 20:32 |
|
|
Авварон |
13.2.2013, 16:38
Сообщение
#14
|
Студент Группа: Участник Сообщений: 99 Регистрация: 26.4.2009 Пользователь №: 709 Спасибо сказали: 14 раз(а) Репутация: 0 |
Разве вектор не может, в случае если тип Т мувабл использовать меммув вместо оператора копирования? В кулисте такой код, вроде, есть (уже давно туда не лазил, не помню, как оно работает). Если стд::вектор всегда юзает оператор копирования, он еще большее говно, чем я думал.
Я вот пиздец не понимаю, почему никто не может читать в суть, а все привязываются к частным примерам. ilyabvt, в вашем примере утечек быть не может, как и в миллионе других однострочных примеров. А вы включите мозг (ну или память) и постарайтесь вспомнить, что происходит, когда классов больше чем 2 штуки и между ними есть зависимости. Например, если вам кровь из носу надо открыть доступ к мембер-вектору. Что будете делать? Возвращать ссылку? Указатель? А если время жизни вектора неизвестно (потоки) ШаредПоинтер? Не проще ли сразу юзать Q* классы, которые и не заставляют думать "где бы тут ссылок напихть, чтоб быстрее работало", и копируются атомарно |
|
|
Iron Bug |
13.2.2013, 17:43
Сообщение
#15
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
А вы включите мозг (ну или память) и постарайтесь вспомнить, что происходит, когда классов больше чем 2 штуки и между ними есть зависимости. Например, если вам кровь из носу надо открыть доступ к мембер-вектору. Что будете делать? Возвращать ссылку? Указатель? А если время жизни вектора неизвестно (потоки) ШаредПоинтер? Не проще ли сразу юзать Q* классы, которые и не заставляют думать "где бы тут ссылок напихть, чтоб быстрее работало", и копируются атомарно да какбэ ничего не происходит, если тот, кто код писал, мозг включал, когда писал. не надо писать кривой код и не будет никаких проблем, собственно. С++ не запрещает прострелить себе ногу, это комитет по стандартизации сразу объявил. так что все проблемы программист создаёт себе исключительно сам, своими руками, от радиуса кривизны которых зависит степень глюкавости его софта. указатели - нормальная техника. и shared pointers - нормальная техника. собственно, и так уже наворочено всяких удобств, лишь бы программисту меньше было нужно заботиться о выделении памяти. куда уж ещё-то упрощать? С++ - не для нытиков, которые привыкли к свободной типизации и автоматической чистке памяти. всё ручками, ручками. и мозг включать почаще как-то так. |
|
|
Алексей1153 |
13.2.2013, 19:43
Сообщение
#16
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Авварон, только не нервничай ты так
давай примеры, когда у тебя будут утечки памяти. Разберём |
|
|
Авварон |
13.2.2013, 19:47
Сообщение
#17
|
Студент Группа: Участник Сообщений: 99 Регистрация: 26.4.2009 Пользователь №: 709 Спасибо сказали: 14 раз(а) Репутация: 0 |
Окей, что, по вашему, должен возвращать этот http://qt-project.org/doc/qt-4.8/qdir.html#entryInfoList метод "в идеологии стандартной библиотеки". Вектор? Или указатель на него? (предположим, что наш компилер не держит мувающий конструктор)
Окей, не будем "стрелять" себе в ногу и перепишем на дир итератор. А тут? http://qt-project.org/doc/qt-5.0/qtcore/qm...ml#allAncestors возвращать конст ссылку на внутренние данные? Или делать копию вектора? Первое чревато нереентрабельностью класса, второе сильно медленнее. Алексей1153 К счастью, я пишу на пюре qt и у меня утечек почти не бывает (ну или мой анализатор говно) |
|
|
Алексей1153 |
13.2.2013, 19:50
Сообщение
#18
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
>> когда классов больше чем 2 штуки и между ними есть зависимости.
тут много решений, всё зависит от ситуации. Обычно экземпляры этих классов существуют одинаковое время, поэтому лично я делаю один из них мембером другого, либо их обоих - соседними мемберами оболочки. Тут утечки и доступы к кривой памяти исключены. Если же экземпляры по какой-то космической причине должны быть независимы, то данные должны копироваться. Бояться же того, что в векторе используется оператор = не нужно, оптимизатор, вполне возможно, применит всё тот же memmove в случае простых базовых типов и указателей Авварон, в этом методе разработчики использовали свой класс, который использует "корову" (лично я против этой коровы во всём и везде!) я бы сделал так
и, пользуясь твоей терминологией, неебёт Я пишу и на Qt и на MFC , у меня тоже не бывает утечек Сообщение отредактировал Алексей1153 - 13.2.2013, 19:47 |
|
|
Авварон |
13.2.2013, 20:12
Сообщение
#19
|
Студент Группа: Участник Сообщений: 99 Регистрация: 26.4.2009 Пользователь №: 709 Спасибо сказали: 14 раз(а) Репутация: 0 |
В вашем АПИ придется писать на 1 строку больше в этом случае:
А еще я не могу пометить entries как const:
Безусловно, корову не надо применять везде, где только можно, но стандартные контейнеры ее должны использовать, имхо Кстати, еще корова делает типы на ней movable, и можно перемещать QЧтоУгодно меммувом в векторе. Одни плюсы Сообщение отредактировал Авварон - 13.2.2013, 20:12 |
|
|
Алексей1153 |
13.2.2013, 22:09
Сообщение
#20
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
В вашем АПИ придется писать на 1 строку больше в этом случае: о, ужас! ) А еще я не могу пометить entries как const: ну это не всегда нужно. Если хочется - можносделать константную ссылку/указатель и можно перемещать QЧтоУгодно меммувом в векторе. с указателем тоже можно, но вот насчёт memmove я сильно сомневаюсь, что в QVector он используется Скажу одно - я прекрасно обхожусь без Qt контейнеров и не жалуюсь. Всё возможно ) |
|
|
Текстовая версия | Сейчас: 29.11.2024, 8:41 |