今天用mac学构造函数的时候,测试了一下返回函数中创建的局部对象会是个什么状况,结果发现了以下神奇的情况。
Test func1()
{
cout << "func1" << endl;
Test temp(10, 20);
cout << "func1 end" << endl;
return temp;
}
void test1()
{
cout << "test1" << endl;
func1(); //没有接收变量
// func1();
cout << "test1 end" << endl;
}
int main(void)
{
test1();
return 0;
}
按道理来讲,该程序应该会在func1结束时,因为有return,创建一个匿名对象,并把temp拷贝给匿名对象,然后回收temp。
然后发现func1没有接收变量,当即回收这个匿名变量。
但运行结果却是这样的。
test1
func1
有参
func1 end
析构
test1 end
居然没有拷贝!
难道是发现没有接收变量,所以干脆省去了这一步骤吗。。
----------
而另一个就更神奇了
Test func1()
{
cout << "func1" << endl;
Test temp(10, 20);
cout << "func1 end" << endl;