Я хочу поднять что-нибудь в ответ на комментарии (в основном от OP и Colomon) об эффективности и т. Д. Зачастую копирование материалов действительно не имеет значения, с точки зрения реальной производительности.
Я написал программы, которые делают много защитного копирования . Это идиома в Java, где, поскольку все объекты передаются по указателю, происходит много алиасов, поэтому вы копируете все, что входит в / из вашего класса, чтобы нарушить алиасинг, гарантируя, что клиенты вашего класса не смогут нарушить инварианты вашего класса изменяя объект по факту.
Программы, которые я написал, защитно копировали целые структуры местами, включая целые списки и карты. Просто чтобы быть уверенным, что производительность не пострадает, я подробно описал программу. Основные узкие места были в другом месте (и даже тогда я настроил эти другие места так, чтобы основным узким местом оставалась сеть). Нигде это защитное копирование фигуры в горячие точки программы.
ETA: Я чувствую необходимость уточнить смысл моего сообщения, поскольку один комментатор прочитал его не так, как я планировал, и вполне возможно, что другие тоже это сделали. Моя точка зрения не в том, что это нормально копировать вещи вокруг волей-неволей; скорее, всегда следует профилировать производительность их кода, а не гадать, как он будет работать.
Иногда, когда копирование целых структур все еще дает приемлемую производительность, и в то же время облегчает написание кода, тогда, на мой взгляд, это лучший компромисс (в большинстве случаев), чем код, который лишь незначительно быстрее, но гораздо больше сложный.