C++ Rvalue references and move semantics

В C++03 была проблема ненужных копий, которые могли происходить неявно. Для этого в C++11 были введены rvalue references и move semantics. Теперь мой вопрос в том, существует ли эта проблема ненужного копирования также в таких языках, как C# и java, или это проблема только C++? Другими словами, делает ли rvalue references C++11 еще более эффективным по сравнению с C# или Java?

Что касается C# (в нем разрешена перегрузка операторов), допустим, у нас есть класс математического вектора, и мы используем его следующим образом.

vector_a = vector_b + vector_c;

Компилятор обязательно преобразует vector_b + vector_c в некоторый временный объект (назовем его vector_tmp).

Теперь я не думаю, что C# сможет отличить временное r-значение, такое как vector_tmp, от l-значения, такого как vector_b, поэтому нам все равно придется копировать данные в vector_a, чего можно легко избежать, используя rvalue references и move semantics в C++11.

11
задан MetallicPriest 29 February 2012 в 13:12
поделиться