main 関数で exit(0) と return 0 の違い

つまりローカル変数のデストラクタが呼ばれるかどうか、ということ。

exitの時

#include <iostream>

using namespace std;

class Foo {
public:
  Foo() {}
  ~Foo() { cout << "Destructor was called." << endl; }
};

int main() {
  Foo foo;
  exit(0);
}

結果

$ ./a.out
$

returnの時

#include <iostream>

using namespace std;

class Foo {
public:
  Foo() {}
  ~Foo() { cout << "Destructor was called." << endl; }
};

int main() {
  Foo foo;
  return 0;
}

結果

$ ./a.out
Destructor was called.
$