g++とVCで結果が違う…
#include <iostream> using namespace std; inline void debug(const char *s, long id) { cerr << s << ":" << id << endl; } class Foo { private: int i; public: Foo(int i) : i(i) { debug("Foo::Foo()", i); }; ~Foo() { debug("Foo::~Foo()", i); }; }; Foo func(Foo foo) { Foo foo2(2); debug("in func()", (long) &foo2); return foo2; } int main() { Foo foo1(1); Foo foo2 = func(foo1); debug("out func()", (long) &foo2); return 0; }
g++
Foo::Foo():1
Foo::Foo():2
in func():2280624
Foo::~Foo():1
out func():2280624
Foo::~Foo():2
Foo::~Foo():1
VC
Foo::Foo():1
Foo::Foo():2
in func():1244740
Foo::~Foo():2
Foo::~Foo():1
out func():1245000
Foo::~Foo():2
Foo::~Foo():1
なんでg++だと関数内のfoo2が返されるんだろう?
スコープアウトしたら破棄されないのかなぁ?
VCは一時オブジェクトは作成されないのかなぁ?