crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

6 страниц V  < 1 2 3 4 > »   
Ответить в данную темуНачать новую тему
> вставка 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 и не париться, не могу вам запретить

void func(std::vector  &x) {
//...
}

int main() {
   std::vector y;
   func(y);
}

Где тут может быть утечка памяти? При вызове функции память не выделяется, "утекать" нечему. Не считая конечно памяти под ссылку которая сама освободиться.

Цитата
стал быть 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  


Цитата(Авварон @ 13.2.2013, 19:38) *
А вы включите мозг (ну или память) и постарайтесь вспомнить, что происходит, когда классов больше чем 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 и у меня утечек почти не бывает (ну или мой анализатор говно:D)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 13.2.2013, 19:50
Сообщение #18


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


>> когда классов больше чем 2 штуки и между ними есть зависимости.

тут много решений, всё зависит от ситуации. Обычно экземпляры этих классов существуют одинаковое время, поэтому лично я делаю один из них мембером другого, либо их обоих - соседними мемберами оболочки. Тут утечки и доступы к кривой памяти исключены.

Если же экземпляры по какой-то космической причине должны быть независимы, то данные должны копироваться.

Бояться же того, что в векторе используется оператор = не нужно, оптимизатор, вполне возможно, применит всё тот же memmove в случае простых базовых типов и указателей

Авварон, в этом методе разработчики использовали свой класс, который использует "корову" (лично я против этой коровы во всём и везде!)

я бы сделал так

void QDir::entryInfoList (QFileInfoList& result, const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort ) const

и, пользуясь твоей терминологией, неебёт

Я пишу и на Qt и на MFC , у меня тоже не бывает утечек

Сообщение отредактировал Алексей1153 - 13.2.2013, 19:47
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Авварон
  опции профиля:
сообщение 13.2.2013, 20:12
Сообщение #19


Студент
*

Группа: Участник
Сообщений: 99
Регистрация: 26.4.2009
Пользователь №: 709

Спасибо сказали: 14 раз(а)




Репутация:   0  


В вашем АПИ придется писать на 1 строку больше в этом случае:
QFileInfoList entries;
dir. entryInfoList(entries);

А еще я не могу пометить entries как const:
const QFileInfoList entries = dir. entryInfoList();


Безусловно, корову не надо применять везде, где только можно, но стандартные контейнеры ее должны использовать, имхо
Кстати, еще корова делает типы на ней movable, и можно перемещать QЧтоУгодно меммувом в векторе. Одни плюсы:)

Сообщение отредактировал Авварон - 13.2.2013, 20:12
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 13.2.2013, 22:09
Сообщение #20


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(Авварон @ 13.2.2013, 23:12) *
В вашем АПИ придется писать на 1 строку больше в этом случае:

о, ужас! )

Цитата(Авварон @ 13.2.2013, 23:12) *
А еще я не могу пометить entries как const:

ну это не всегда нужно. Если хочется - можносделать константную ссылку/указатель

Цитата(Авварон @ 13.2.2013, 23:12) *
и можно перемещать QЧтоУгодно меммувом в векторе.

с указателем тоже можно, но вот насчёт memmove я сильно сомневаюсь, что в QVector он используется

Скажу одно - я прекрасно обхожусь без Qt контейнеров и не жалуюсь. Всё возможно )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

6 страниц V  < 1 2 3 4 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 6:38