Sie sollten einen weiteren Konstruktor hinzufügen, um auch temporäre Arrays zu akzeptieren.
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))
{}
};
Sie auch hier, dass mit einem forwarding reference
T&&
, aber ich habe aus Gründen der Klarheit hätte gehen können. Dies ist expliziter.
Beachten Sie auch, dass die Verwendung von move in diesem Fall nicht immer die Leistung garantiert. Für array
bedeutet move, dass die von array
gehaltenen Elemente verschoben werden. In diesem Fall Object
Klasseninstanzen.
Damit dies besser funktioniert, SOLLTEN Sie eine move constructor
Klasse Object
bereitstellen, sonst wird der Verschiebevorgang hier nichts anderes als eine Kopie einzelner Object
Instanzen sein.
HINWEIS: Der Move-Konstruktor des Object
sollte billiger als der Kopierkonstruktor sein. Sonst gäbe es keinen Unterschied zwischen move und copy performance.
Nehmen Sie eine universelle Referenz, wenn Sie die Leistung verbessern möchten (in einigen Fällen) – tkausl
Mögliche Duplikate? http://StackOverflow.com/Questions/14370730 –
"richtigen Wert"? Meinst du "Rvalue" ?! –