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