title: Which is the difference between declaring a constructor private and =delete?
body: <p>For example, I want to declare a class but I want the client to not be able to use the copy constructor (or copy assignment operator)</p>
  
  <p>Both of the following two does not allow the use of the copy constructor:</p>
  
  <p><strong>1.</strong></p>
  
  <pre><code>class Track
  {
  public:
    Track(){};
    ~Track(){};
  private:
    Track(const Track&amp;){};
  };
  </code></pre>
  
  <p><strong>2.</strong></p>
  
  <pre><code>class Track
  {
  public:
    Track(){};
    ~Track(){};
    Track(const Track&amp;)=delete;
  };
  </code></pre>
  
  <p><strong>Is one of these ways "more correct" than the other or are equal? Is there any side-effect?</strong></p>
  
  <pre><code>//Does not compile with both the above ways
  int main()
  {
    Track l;
    Track p(l);
  }
  </code></pre>