クラスの代入とデストラクタ

#include <iostream>
using namespace std;

#define DEBUG(s) do { cerr << (s) << endl; } while(false);

class Foo {
private:
  int i;
public:
  Foo();
  ~Foo();
  int value();
};

Foo::Foo() : i(100) {
  DEBUG("Foo::Foo()");
}

Foo::~Foo() {
  DEBUG("Foo::~Foo()");
}

int Foo::value() {
  return this->i;
}

int main() {
  Foo foo1;
  Foo foo2 = foo1;
  cout << foo1.value() << endl;
  cout << foo2.value() << endl;
}


Foo::Foo()
100
100
Foo::~Foo()
Foo::~Foo()

えーっと…

  • クラスオブジェクトを代入すると、メンバをコピー
  • デストラクタは代入元/先で呼ばれる