これが以前に尋ねられた場合は申し訳ありませんが、私が理解しているように、C ++ 11にstd::vector
はmoveコンストラクターがあるため、値ごとに返すなど、特定の状況ではコピーのコストはほとんどかかりません。vector
ただし、メンバー変数としてaを使用して、このようなクラスがある場合は、次のようになります。
class MyClass {
public:
MyClass() { }
MyClass(const MyClass& rhs) { }
// other interfaces
private:
std::vector<int> myvec;
// implementation
};
そして、これらの1つを値で返す関数があります。
MyClass somefunc() {
MyClass mc;
// fill mc.myvec with thousands (maybe even millions) of ints
return mc;
}
のmoveコンストラクターmc.myvec
が呼び出され、のmoveコンストラクターは、それ自体がmoveコンストラクターについて何も知らなくてもstd::vector
利用されますか?MyClass
または、のコピーコンストラクターvector
が呼び出され、それらの数千(場合によっては数百万)のすべてint
を1つずつコピーする必要がありますか?