Cloning TF2 built from function pointer

I am noticing a strange issue with working with TF2 parameters. Namely, after cloning a TF2, any further changes to the parameters have no effect. This is best demonstrated with the code below.

double circles(Double_t* x, Double_t* p){
  return (p[0]*(x[0]*x[0]+x[1]*x[1]) +
	  p[1]*(x[0]*x[0]-x[1]*x[1]));
}

void TestCase(){
  TCanvas* can = new TCanvas;

  TF2* orig = new TF2("orig",circles,-2,2,-2,2,2);
  //TF2* orig = new TF2("orig","[0]*(x*x+y*y) + [1]*(x*x-y*y)",-2,2,-2,2);

  orig->SetParameters(1,0);
  orig->Draw();

  can->Update(); cin.get();

  orig->SetParameters(1,2);
  orig->Draw();

  can->Update(); cin.get();

  orig->SetParameters(1,0);
  orig->Draw();

  can->Update(); cin.get();

  //Now, the same, but with a clone of the original.
  TF2* copy = (TF2*) orig->Clone();
  copy->SetLineColor(kGreen);
  copy->Draw();

  can->Update(); cin.get();

  copy->SetParameters(1,2);
  copy->Draw();

  can->Update(); cin.get();

  copy->SetParameters(1,0);
  copy->Draw();
}

When this is run, I expect the shape being drawn to change after each time Enter is pressed, because the parameters of the TF2 have been changed. However, the plot only changes when changing the parameters of the original TF2, not the cloned TF2.

Even more strange, this behavior is only present when the TF2 is based on a C++ function. If the currently-commented line is used instead, the plot does update correctly for both the original and cloned TF2.

Is there something that I am doing incorrectly in using TF2::Clone, and what should be done to correctly make a copy of it?

See the “WARNING!” in the “TF1(const char* name, void* fcn, Double_t xmin, Double_t xmax, Int_t npar)” constructor.