2

Imageクラスstd::vectorに画像を保存するために使用しています。それらがどのように機能するかを理解するのに少し苦労しています。画像を回転させる関数:

void Image :: resize (int width, int height)
{
    //the image in the object is "image"

    std::vector<uint8_t> vec;  //new vector to store rotated image

    // rotate "image" and store in "vec"

    image = vec; // copy "vec" to "image" (right?)

    //vec destructs itself on going out of scope
}

最後のコピーを防ぐ方法はありますか? Javaのように、参照を切り替えるだけですか?コピーが防止されるとよいでしょう。

4

1 に答える 1

10

使用できますstd::vector::swap

image.swap(vec);

これは基本的にポインターのスワップであり、内容はコピーではなく転送されます。vecスワップ後の内容は気にしないので、完全に有効です。

vecC++11 では、 の内容を に「移動」できますimage

image = std::move(vec);

この操作は、の状態があまり明確に定義されていないことを除いて、本質的に同じ効果vecがあります (それは自己一貫性のある状態ですが、その内容について仮定を行うことはできません... しかし、破棄していることを知っているので、とにかく気にしません。すぐに)。

于 2013-02-13T12:52:28.517 に答える