我一直在阅读迈尔斯书,并通过参考/指针与价值观返回了该项目。 的一点是,如果我们的例如功能是这样的:C++:通过引用返回值返回
ClassA& AddSomething(ClassA classA)
{
ClassA tempClassA;
//... do something on tempClassA
return tempClassA;
}
这是行不通的,因为我们返回到被栈上创建一个对象的引用,现在是死的,该函数完成。
他给出了两个解决方案:
- 使用函数内的局部静态ClassA的。这有其 的问题,但至少我们可以确定该对象存在。
作为对象返回:
ClassA AddSomething(ClassA classA) { ClassA tempClassA; //... do something on tempClassA return tempClassA; }
现在,如果我做的事:
ClassA obj1;
ClassA obj2 = AddSomething(obj1);
我的困惑,现在,在执行这条线时:
- tempClassA的“副本”被制作并传递给C的拷贝构造函数 lassA(初始化obj2)? OR
- tempClassA被传递给ClassA的拷贝构造函数 ,因为拷贝构造函数需要引用。
所以基本上,传递给拷贝构造函数的是tempClassA(它是在函数内部的堆栈中创建的)的引用,或者是对tempClassA副本的引用。
此外,我的另一个问题是,我读过,如果我得到一个函数局部变量的引用,在这种情况下,本地变量将不会被删除。 例如,
ClassA & classRef = AddSomething(obj1);
在这种情况下,如果AddSomething()返回一个引用,则classRef不是指向一个已删除的参考,因为局部变量将被保留。我对此有正确的理解吗?
看看[copy elision](http://en.wikipedia.org/wiki/Copy_elision)。 – juanchopanza