title: Move Semantics for std::vector member
body: <p>I want to ensure that I properly understand this. I ask it here since it I have not fund it spelled out explicitly.</p>
  
  <p>For example I have a triangle mesh class that is basically built like this:</p>
  
  <pre><code>class Mesh
  {
  public:
      struct Face 
      {
          unsigned int a;
          unsigned int b;
          unsigned int c;
      };
  //... 
  private:
      std::string            file;
      std::vector&lt;glm::vec3&gt; vertices;
      std::vector&lt;glm::vec3&gt; normals;
      std::vector&lt;glm::vec2&gt; texcoord;
      std::vector&lt;Face&gt;      faces;   
  }
  </code></pre>
  
  <p>Since the data in the mesh can get quite large I want to implement proper move semantics. For pointer types I fully understand this, but to trigger the rvalue constructor I need to use move, right? </p>
  
  <p>For example the rvalue constructor will be:</p>
  
  <pre><code>Mesh::Mesh(Mesh&amp;&amp; other)
  : file(std::move(other.file)),
    vertices(std::move(other.vertices)),
    normals(std::move(other.normals)),
    texcoord(std::move(other.texcoord)),
    faces(std::move(other.faces) {}
  </code></pre>
  
  <p><strong>Note:</strong> Before someone points out the obvious, the application uses in many places a share_ptr. But I don't want to artificially restrict the use of the class.</p>