几位同事和我正在讨论当从C方法返回一个局部变量(在堆栈上分配)时会发生什么.
以下代码在单元测试中工作,但我相信这只是因为单元测试是幸运的,并且不尝试在obj使用的堆栈上重用内存.
这是否有效?
static MyObject createMyObject() { MyObject obj; return obj; }
解决方法
会发生什么是复制构造函数被调用来创建本地对象的副本,这就是调用者收到的.
编译器可能会在一个称为copy elision的进程中删除该副本,但这是由编译器自行决定的 – 您没有太多的控制权.
这种模式能够产生你害怕的问题,但只有当你返回一个指针或者引用本地对象的时候.