Вы должны добавить еще один конструктор, чтобы принять временные массивы.
class A
{
std::array<Object, 5> m_objects;
A(std::array<Object, 5> objects)
: m_objects(std::move(objects))
{}
A(std::array<Object, 5>&& robj): m_objects(std::move(robj))
{}
};
Вы могли бы также прошли с forwarding reference
T&&
, но я оставил, что здесь для ясности. Это более очевидно.
Также обратите внимание, что использование перемещения в этом случае не всегда гарантирует выполнение. Для array
движение подразумевает перемещение элементов, удерживаемых array
. В этом случае Object
экземпляров класса.
Для этого лучше ДОЛЖНО предоставить класс move constructor
классу Object
, иначе операция перемещения здесь будет только копией отдельных экземпляров Object
.
ПРИМЕЧАНИЕ. Конструктор перемещения Object
должен быть дешевле, чем конструктор копирования. В противном случае не было бы никакой разницы между перемещением и копированием.
Возьмите универсальную ссылку, если вы не улучшите производительность (в некоторых случаях) – tkausl
Возможный дубликат? http://stackoverflow.com/questions/14370730 –
"правильное значение"? Вы имеете в виду «rvalue» ?! –