fork download
  1. #include <iostream>
  2.  
  3. struct A
  4. {
  5. int val;
  6.  
  7. A(int val) : val(val) { std::cout << "A(int) val = " << val << '\n'; }
  8.  
  9. A(const A& other) : val(other.val) { std::cout << "A(const A&) val = " << val << '\n'; }
  10. A(A&& other) : val(other.val) { other.val = 0; std::cout << "A(A&&) val = " << val << '\n'; }
  11.  
  12. ~A() { std::cout << "~A() val = " << val << '\n'; }
  13.  
  14. A& operator = (const A& rhs) { val = rhs.val; std::cout << "A& operator = (const A&) val = " << val << '\n'; return *this; }
  15. A& operator = (A&& rhs) { val = rhs.val; rhs.val = 0; std::cout << "A& operator = (A&&) val = " << val << '\n'; return *this; }
  16. };
  17.  
  18. A foo()
  19. {
  20. A a(77);
  21. return a;
  22. }
  23.  
  24. A bar()
  25. {
  26. A a(777);
  27. return std::move(a);
  28. }
  29.  
  30. int main()
  31. {
  32. {
  33. std::cout << "foo:\n";
  34. A a = foo();
  35. }
  36. {
  37. std::cout << "bar:\n";
  38. A v = bar();
  39. }
  40. }
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
foo:
A(int) val = 77
~A() val = 77
bar:
A(int) val = 777
A(A&&) val = 777
~A() val = 0
~A() val = 777