Документация по стандартной библиотеке шаблонов для list говорит:
void push_back (const T & x);
Добавить элемент в конце Добавляет новый элемент в конце списка, сразу после последнего текущего элемента. Содержание этого нового элемента инициализируется копией x.
Эти семантики сильно отличаются от семантики Java и путают меня. Есть ли в STL принцип дизайна, который мне не хватает? "Копировать данные все время"? Это меня пугает. Если я добавлю ссылку на объект, почему объект скопирован? Почему не только объект прошел?
Здесь должно быть решение для определения языка, но большая часть комментариев, которые я нашел в Qaru и других сайтах, сосредотачивается на проблемах сбрасывания исключений, связанных с тем, что все это копирование объектов может вызывать исключения. Если вы не копируете и просто обрабатываете ссылки, все эти проблемы с исключениями исчезают. Очень смутно.
Обратите внимание: в этой старой базе кода, с которой я работаю, boost не является вариантом.