私はstd::vector
C ::ベクトル
struct Mystruct
{
Mystruct(const std::vector<int>& w): v(w)
{
std::cout << "Copy constructor :" << v.at(0) << "\n";
}
Mystruct(const std::vector<int>&& w): v(w)
{
std::cout << "Move Constructor :" << v.at(0) << "\n";
}
private:
std::vector<int> v;
};
を保持するクラスを持っていると私は
int main()
{
auto x = std::vector<int> {1,2,3};
Mystruct M1(x);
Mystruct M2(std::vector<int> {3,2,1});
return 0;
}
M1
のようなオブジェクトを作成し、コピーコンストラクタを使用して構築されており、 M2
"move"コンストラクタを使用していますが、両方の割り当てがvとwの異なるアドレスを保持していますが、2番目のコンストラクタの初期化リストでv(std :: move(w))を使用すると同じことが起こります。私は両方の割り当てがwの内容をコピーしていると思います、これは正しいですか?その場合は、コピーする代わりにwの内容を移動するにはどうすればいいですか?
"移動"部分はオブジェクトではなく*リソース*を参照します。 – Rakete1111
アドレス 'v.data()'を見てください。 –