2016-06-13 56 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的移動構造函數應該比複製構造函數便宜。否則在移動和複製性能方面沒有區別。