Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > использование move семантики


Автор: kosmonaFFFt 10.8.2012, 06:26
Доброго времени суток...

Представим, что имеется некий класс super_t
Код

class super_t
{
public:
    super_t() {}
    super_t(const super_t& x) {}
    super_t(super_t&& x) {}
    const super_t& operator=(const super_t& x) {}
    const super_t& operator=(super_t&& x) {}
    ~super_t() {}
};

и некие методы/функции, которые его используют таким образом:
Код

super_t super_method_0()
{
    super_t result;
    return ::std::move(result);
}

super_t super_method_2(const super_t& x, const super_t& y)
{
...
}

void some_fn()
{
    super_t x = super_method_2(super_method_0(), super_method_0());
}


Соответственно вопрос - будет ли при вызове super_method_2(super_method_0(), super_method_0()) копирование или перемещение при передаче значений в super_method_2, и как избежать лишнего копирования в таких ситуациях?

Автор: bsa 10.8.2012, 10:24
копирования не будет

Автор: kosmonaFFFt 10.8.2012, 10:28
А временный объект, возвращаемый из super_method_0 удалится после завершения super_method_2, я прав?

Автор: bsa 14.8.2012, 13:59
да

Автор: baldina 14.8.2012, 16:50
kosmonaFFFt, 
Цитата(kosmonaFFFt @  10.8.2012,  06:26 Найти цитируемый пост)
    super_t result;
    return ::std::move(result);

даже в случае 
Код

    super_t result;
    return result;

копирования скорее всего не будет, т.к. современный компилятор с включенной оптимизацией применит http://alenacpp.blogspot.com/2008/02/rvo-nrvo.html

Автор: borisbn 14.8.2012, 20:51
> компилятор с включенной оптимизацией применит NRVO
С включенной  - тоже. Проверял как-то на LWS

Автор: mes 14.8.2012, 22:48
Цитата(borisbn @  14.8.2012,  19:51 Найти цитируемый пост)
> компилятор с включенной оптимизацией применит NRVO
С включенной  - тоже. 
 smile 

Автор: borisbn 15.8.2012, 06:40
Агхр. Ну вы меня поняли smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)