#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;
}
Run Code Online (Sandbox Code Playgroud)
控制台输出是:
$ g++ -g -Wall -O0 testdestructor.cc
$ ./a.out
Run Code Online (Sandbox Code Playgroud)
构造..
破坏...
编译器优化.
在其他编译器/优化设置中,它可能会被多次调用.
看到这个编译:http://codepad.org/8kiVC3MM
输出:
1个构造...
2个破坏...
3个破坏...
4个破坏...
5个破坏......
请注意,所有那些时候都没有调用定义的构造函数,因为调用了编译器生成的复制构造函数.
请参阅此编译:http://codepad.org/cx7tDVDV
...我在你的代码之上定义了一个额外的拷贝构造函数:
Test(const Test& other)
{
printf("cctor\n");
}
Run Code Online (Sandbox Code Playgroud)
输出:
1个构造..
2个cctor
3 destruct ...
4 cctor
5 destruct ...
6 cctor
7 destruct ...
8 destruct ...
我想原因是'Get'中的返回值优化.
看看http://en.wikipedia.org/wiki/Return_value_optimization
实际上你的代码不是标准的例子,但也许你的编译器也在这里应用它.