What's the point of virtual copy constructors (clone functions)?
<p>With virtual copy constructors, a class <code>Vehicle</code> has a <code>copy()</code> virtual member function that all inherited classes like <code>Car</code> will implement.</p>

<p>Later some other class can have any type of vehicle as a member variable:</p>

<pre><code>struct Foo {
  Vehicle *v;
  Foo(const Vehicle &amp;veh) {
    v = veh.clone();
  }
};
</code></pre>

<p>I don't see the point. Why not get rid of <code>clone()</code> and do <code>new</code> "in place" like this</p>

<pre><code>struct Foo {
  Vehicle *v;
  Foo(Vehicle *veh) {
    v = veh; //veh has no clone()
  }
  ~Foo() {
    delete v;
  }
};

//elsewhere
Foo f(new Car());
</code></pre>

<p>What are the drawbacks (other than it only working for "in place" creation)? Now nobody has to implement clone and everything seems much easier.</p>
