У меня есть функция, которая производит тип дорогого объекта (содержащий векторы и карты не фиксированного размера), поэтому я действительно хочу избежать вызова копий c'ors.
До сих пор я только что вернулсяstd :: shared_ptr из метода и использовал его, но я думаю, что это ужасно и требует, чтобы определение типов было действительно полезным.
Я знаю две вещи, которые могут мне помочь.Во-первых, скопируйте elision, а во-вторых, это семантика перемещения.
Моя проблема в том, что я знаю, как правильно использовать ни то, ни другое.Мое исследование показало, что копирование полностью выполняется компилятором и не зависит от st'd.На самом деле я не хочу полагаться только на это.
Так как мне убедиться, что задание перемещения вызывается и имеет ли оно то, что мешает компилятору делать копию elision.
ResultSet &&generateResults()
{
//ResultSet a(); :S
ResultSet a;
a.populat(...
//blah blah blah
return a;
}
//else where (where the && assignment operator is overloaded
ResultsSet b = generateResults();
В этом случае это самый правильный способ закодировать это?и если нет, как я мог бы улучшить это.Я счастлив использовать C ++ 0x только конструкции.
Кстати: мой компилятор gcc 4.6