2017-02-05 21 views
1

私は、いくつかのデータ、特に大きな静的に割り当てられた配列を含む構造体を持っています。 配列の長さが必ずしも完全に使用されているとは限りません。静的配列を持つC++の効率的な構造コピー

私はこのデータのコピーを(リアルタイムループで)非常に頻繁に行う必要があるので、できるだけ効率的にする必要があります。したがって、有用なデータを含む配列の長さだけをコピーしたいと思います。

以下は、代入演算子のオーバーライドに関する私の提案です。あなたはそれの効率を詳しく教えてください、そして、私がかなり理解していないコピーとスワップのイディオムとを比較してください(What is the copy-and-swap idiom?)。

struct Config 
{ 
    // Assignment operator: Copy all data from other instance 
    Config& operator=(const Config&obj) 
    { 
     currentArrayLength = obj.currentArrayLength; 
     memcpy(array, obj.array, obj.currentArrayLength * sizeof(array[0])); 
     return *this; 
    } 
    /* Static */ 
    static const size_t arrayLengthMax = 1000; 
    /* Data */ 
    uint32_t currentArrayLength = 0; 
    int32_t array[arrayLengthMax]; 
} 

答えて

0

コピーおよびスワップイディオムは、一般的に、あなたがそれを暗黙的にコピーコンストラクタによってコピーされることを意味し、値によってパラメータobjを取ることを意味します。利点は、コピーロジックを2つの場所に実装する必要はなく、コピーコンストラクター(DRYの仕組み:自分自身を繰り返さないでください)だけです。その後、objthisの内部データを交換し、バイナリ値のコピーが範囲外になると、古いデータは自動的に破棄されます。

これは、swapが非常に安価であるため、動的データを管理するオブジェクトのパフォーマンスを低下させることなく行うことができますが、オブジェクト自体にスペースがあるため、現在の実装は高速です取得。

関連する問題