#include <iostream>
using namespace std;
class Test
{
public:
Test()
{
printf("construct ..\n");
}
~Test()
{
printf("destruct...\n");
}
};
Test Get()
{
Test t = Test();
return t;
}
int main(int argc, char *argv[])
{
Test t = Get();
return 0;
}
コンソール出力は次のとおりです。なぜデストラクタは一度だけ呼び出されましたか?
$ g++ -g -Wall -O0 testdestructor.cc
$ ./a.out
構文..
破壊...理由は、コンパイラによってコピーエリジオンの
[コピーエリッションと戻り値の最適化とは何ですか?](http://stackoverflow.com/questions/12953127/what-are-copy-elision-and-return-value-optimization) –