例如,我有
class A
{
std::array<Object, 5> m_objects;
A(std::array<Object, 5> objects)
: m_objects(std::move(objects)) //does using right value will improve
// performance in some cases??
{}
};
在构造函数中使用正确的值会在某些情况下提高性能吗?
答案 0 :(得分:1)
您还应该添加另一个构造函数来接受临时数组。
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&&
,但为了清楚起见,我把它留在了这里。这更明确。
另请注意,在这种情况下使用move并不总能保证性能。对于array
移动暗示,移动array
所持有的元素。在这种情况下,Object
类实例。
为了更好地执行此操作,您应该提供move constructor
到Object
类,否则此处的移动操作将只是个别Object
实例的副本。
注意:Object
的移动构造函数应该比复制构造函数便宜。否则,移动和复制性能之间没有区别。