Qt 4.5 - QList:: QList (константа QList&) - действительно ли это - глубокий конструктор копии?

Тот, с которым я столкнулся, бросал аппаратные средства в серьезно взломанный код, в попытке сделать его достаточно быстро, вид обратной из статьи Jeff Atwood упомянутый в комментарии Rulas. Я не говорю о различии между ускорением вида, который использует основной, корректный алгоритм путем выполнения его на более быстрых аппаратных средствах по сравнению с использованием оптимизированного алгоритма. Я говорю об использовании не, очевидно, корректный, домой варил O (n^3) алгоритм, когда O (n регистрируют n) алгоритм находится в стандартной библиотеке. Существуют также вещи как стандартные программы кодирования руки, потому что программист не знает то, что находится в стандартной библиотеке. То, что очень расстраивающее.

8
задан Extrakun 14 August 2009 в 10:22
поделиться

4 ответа

Это мелкая копия. Глубокая копия данных происходит за кулисами при первом вызове неконстантной функции для копии или исходного списка.

5
ответ дан 5 December 2019 в 20:18
поделиться

Эта операция занимает постоянное время, потому что QList неявно разделяется.

Если вы не изменяете список, они становятся общими! Так что за кулисами вы читаете информацию по тому же адресу!

Если общий экземпляр изменен, он будет скопировано (копирование при записи), и это занимает линейное время.

Но если вы измените список копирования, не будет другого выбора, который эффективно копирует список! Итак, у вас есть линейная стоимость в зависимости от размера списка.

из qt doc о копировании для записи и разделяемой памяти:

Глубокая копия подразумевает дублирование объект. Мелкая копия - это ссылка копия, т.е. просто указатель на общий блок данных. Сделать глубокую копию можно дорогой с точки зрения памяти и процессора. Создание неглубокой копии выполняется очень быстро, потому что это включает только установку указатель и увеличение ссылки count.

Итак, если вы не изменяете список, вы читаете информацию по тому же адресу, который указан в списке в качестве параметра, это называется мелкой копией. А если вы его измените, у вас будет полная копия списка.

3
ответ дан 5 December 2019 в 20:18
поделиться

Конструктор копирования выполняет быстрое (неглубокое) копирование. Если вы затем измените либо исходный список, либо его копию, будет создана глубокая копия данных.

Если у вас есть какие-либо сомнения, я предлагаю вам перечитать документацию по семантике копирования при записи.

Это то же поведение, что и QString, QList, QArray и многие другие классы Qt.

2
ответ дан 5 December 2019 в 20:18
поделиться

AFAIK, при копировании содержимого (при записи) он вызывает конструктор копирования каждого элемента в списке , как и в случае с std :: list.

-2
ответ дан 5 December 2019 в 20:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: