title: Return Value Optimization and private copy constructors
body: <p>I've written a simple linked list because a recent interview programming challenge showed me how rusty my C++ has gotten.  On my list I declared a private copy constructor because I wanted to explicitly avoid making any copies (and of course, laziness).  I ran in to some trouble when I wanted to return an object by value that owns one of my lists.</p>
  
  <pre><code>class Foo
  {
     MyList&lt;int&gt; list;  // MyList has private copy constructor
  
     public:
        Foo() {};
  };
  
  class Bar
  {
     public:
        Bar() {};
  
        Foo getFoo()
        {
           return Foo();
        }
  };
  </code></pre>
  
  <p>I get a compiler error saying that MyList has a private copy constructor when I try to return a Foo object by value.  Should Return-Value-Optimization negate the need for any copying?  Am I required to write a copy constructor?  I'd never heard of move constructors until I started looking for solutions to this problem, is that the best solution?  If so, I'll have to read up on them.  If not, what is the preferred way to solve this problem?</p>