2016-06-13 4 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&&で行っている可能性が、私は明確にするため、ここでそれを除外しました。これはより明示的です。

また、この場合にmoveを使用しても、必ずしもパフォーマンスが保証されるわけではありません。 arrayの移動は、arrayが保持する要素を移動することを意味します。この場合、クラスインスタンスはObjectです。これは、より良い実行するため

は、あなたが他にここに移動操作は、個々の Objectインスタンスのコピーではなく、何もしないであろう、 move constructor Objectにクラスを提供する必要があります。

注:Objectの移動コンストラクタは、コピーコンストラクタよりも安価である必要があります。それ以外の場合、移動とコピーのパフォーマンスに違いはありません。

関連する問題