#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Exmpl{
Exmpl()
{
cout << "Exmpl()" << endl;
}
Exmpl(const Exmpl&)
{
cout << "Exmpl(const Exmpl&)" << endl;
}
Exmpl& operator=(const Exmpl& rhs)
{
cout << "operator=Exmpl()" << endl;
return *this;
}
~Exmpl()
{
cout << "~Exmpl()" << endl;
}
};
void func1(Exmpl obj)
{
}
void func2(Exmpl &obj)
{
}
Exmpl func3()
{
Exmpl obj;
return obj;
}
int main()
{
Exmpl eobj;
func1(eobj);
func2(eobj);
eobj = func3();
Exmpl *p = new Exmpl;
vector<Exmpl> evec(3);
delete p;
return 0;
}
g ++(4.4.3)でコンパイルすると、
Exmpl()
Exmpl(const Exmpl&)
~Exmpl()
Exmpl()
operator=(const Exmpl&)
~Exmpl()
Exmpl()
Exmpl()
Exmpl(const Exmpl&)
Exmpl(const Exmpl&)
Exmpl(const Exmpl&)
~Exmpl()
~Exmpl()
~Exmpl()
~Exmpl()
~Exmpl()
~Exmpl()
vs2008 では、結果は次のようになります。
Exmpl()
Exmpl(const Exmpl&)
~Exmpl()
Exmpl()
Exmpl(const Exmpl&)
~Exmpl()
operator=(const Exmpl&)
~Exmpl()
Exmpl()
Exmpl()
Exmpl(const Exmpl&)
Exmpl(const Exmpl&)
Exmpl(const Exmpl&)
~Exmpl()
~Exmpl()
~Exmpl()
~Exmpl()
~Exmpl()
~Exmpl()
コードが「eobj = func3();」になったとき 主に、vs2008 の結果の 5 行目と 6 行目が g++ で見つかりません。いくつかのレベルの最適化を試みましたが、結果は同じです。違いの理由は何ですか?