コピーコンストラクタ

代入ではコピーコンストラクタは呼ばれない、と。
代入は演算子のオーバーロードで操作するのかな?

#include <iostream>

using namespace std;

class Foo {
  int i;
public:
  Foo(int i) : i(i) {
    cout << "constructor: " << i << "\n";
  }

  Foo(const Foo &foo) {
    cout << "copy constructor: " << i << "<-" << foo.i << "\n";
    i = foo.i;
  }

  int get_i() { return i; }
};

int main() {
  Foo foo1(1), foo2(2);
  Foo foo3 = foo1;
  foo2 = foo1;

  cout << foo1.get_i() << "\n";
  cout << foo2.get_i() << "\n";
  cout << foo3.get_i() << "\n";

  return 0;
}


constructor: 1
constructor: 2
copy constructor: 0<-1
1
1
1