cpp
1#include <iostream> 2#include <vector> 3#include <string> 4 5using namespace std; 6 7class X 8{ 9public: 10 X() = default; 11 X(X&) = default; 12 X(X&&) = default; 13 X& operator = (X&) = default; 14 X& operator = (X&&) = default; 15}; 16 17int main() 18{ 19 X x1; 20 cout << &x1 << endl; 21 22 X x_c1(x1); 23 cout << &x_c1 << endl; 24 25 X x_m1(move(x1)); 26 cout << &x_m1 << endl; 27 28 X x2; 29 cout << &x2 << endl; 30 31 X x_c2 = x2; 32 cout << &x_c2 << endl; 33 34 X x_m2 = move(x2); 35 cout << &x_m2 << endl; 36}
以上のコードを実行してみたところ、すべての変数のアドレスが違いました。
moveの場合アドレスが変わらないことを想定していました(すでに認識が間違っている?)
defaultではmoveの挙動にならないのでしょうか。
【追記】
cpp
1#include <iostream> 2#include <vector> 3#include <string> 4 5using namespace std; 6 7class X 8{ 9public: 10 vector<string> s; 11 X() = default; 12 X(X&) = default; 13 X(X&& x) noexcept : s(move(x.s)) {}; 14}; 15 16int main() 17{ 18 X x1; 19 cout << &x1.s << endl; 20 21 X x_c1(x1); 22 cout << &x_c1.s << endl; 23 24 X x_m1(move(x1)); 25 cout << &x_m1.s << endl; 26}
以上のコードでもアドレスが変わるのはなぜでしょうか…
moveを定義したつもりなのですが…
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。