2

多数のメンバーを持つ POD 構造体があり、その算術演算子を C++11 で実装する最も効率的な方法を知りたいです。

この構造体は、数学的なコンテキストでプリミティブの代わりに使用することを意図しています。例えば:

template<typename Double>
Double calcSomething(const Double& d0, const Double& d1, const Double& d2)
{
    return d0*d1 + 3*d2 - 6;
}

whereDoubleは単なる通常doubleの か、関連するすべてのオーバーロードされた演算子を含む POD 構造体です。

struct MyDouble
{
    MyDouble(double a, double b) : _a(a), _b(b) {}
    double _a;
    double _b;
};
MyDouble operator+(const MyDouble& d0, const MyDouble& d1) 
{
    return MyDouble(d0._a + d1._a, d0._b + d1._b);
}

ムーブ コンストラクターと右辺値参照を使用して C++11 でこれを実装するための本当に効率的で効率的な方法はありますか? 大きな POD 構造体になる可能性があることに注意してくださいMyDouble(つまり、2 つの double だけではありません)。

ヒープ割り当てメモリへのポインタを持たない構造体についての議論を続けたいと思います。

4

1 に答える 1

0

構造体が他のオブジェクトやリソースを所有していない場合、移動セマンティクスとコピー セマンティクスは同じです。移動コンストラクターまたは移動代入演算子でさえ、すべてのデータ メンバーをターゲット オブジェクトにコピーする必要があります。ディープコピーを実行する必要はありません。つまり、所有されているサブオブジェクトは、コピーされるのではなく、単にターゲット オブジェクトに転送されます。

構造体が本当に巨大な場合は、ヒープに割り当てられたインスタンスへのポインターを含むホルダー型を作成できます (できれば scoped_ptr を使用します)。その後、そのホルダー タイプの移動をサポートできます。実際、scoped_ptr で実際のインスタンスを管理すると、自動的に移動サポートが得られると思います。

于 2012-10-01T09:25:02.873 に答える