объекты C ++ 0x

У меня есть функция, которая производит тип дорогостоящего объекта (содержащий векторы и карты нефиксированного размера), поэтому я действительно хочу избежать вызова копий 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

7
задан bitek 15 March 2013 в 13:14
поделиться