title: What is the correct way to use move semantics in C++?
body: <p>Consider this code:</p>
  
  <pre><code>class A {
  private:
      std::string data;
  public:
      void set_data(std::string&amp;&amp; data) {
          this-&gt;data = std::move(data); // line 6
      }
  };
  
  int main() {
      std::string move_me = "Some string";
      A a;
      a.set_data(std::move(move_me)); // line 13
  }
  </code></pre>
  
  <p>I'm understand that we need to call <code>std::move()</code> on line 13 so that it casts an lvalue to rvalue reference (does that sound correct? I'm new to this). </p>
  
  <p>However, on line 6, do we need to use <code>std::move()</code> again? I assume not, since we already passed an rvalue reference and <code>std::string</code>'s move constructor will be called. Is that correct?</p>