2016-06-13 25 views
1

例如,我有数组的右值是否会提高性能?

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?? 
    {} 
}; 

是否在构造函数中使用正确的价值将提高在某些情况下的性能?

+1

如果您不想提高性能(在某些情况下),请采取通用参考 – tkausl

+0

可能存在重复? http://stackoverflow.com/questions/14370730 –

+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 referenceT&&,但我离开了这一点这里的清晰度。这更明确。

另请注意,在这种情况下使用移动并不总能保证性能。对于array移动意味着,移动array所持有的元素。在这种情况下,Object类实例。

为了更好地执行,您应该提供move constructorObject类,否则此处的移动操作将只是个别Object实例的副本。

注意:Object的移动构造函数应该比复制构造函数便宜。否则在移动和复制性能方面没有区别。