У меня есть функция, которая производит тип дорогостоящего объекта (содержащий векторы и карты нефиксированного размера), поэтому я действительно хочу избежать вызова копий c'tors .
До сих пор я только что возвращал std :: shared_ptr из метода и использовал его, но я считаю это некрасивым и требует, чтобы определение типа было действительно удобным.
Я знаю две вещи, которые могут мне помочь. Во-первых, скопируйте элизию, а во-вторых, семантику перемещения.
Моя проблема в том, что я не знаю, как правильно использовать ни то, ни другое. Мое исследование показало, что копирование полностью выполняется компилятором и не является частью 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