C返回本地对象

前端之家收集整理的这篇文章主要介绍了C返回本地对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
几位同事和我正在讨论当从C方法返回一个局部变量(在堆栈上分配)时会发生什么.

以下代码在单元测试中工作,但我相信这只是因为单元测试是幸运的,并且不尝试在obj使用的堆栈上重用内存.

这是否有效?

static MyObject createMyObject() {
    MyObject obj;
    return obj;
}

解决方法

会发生什么是复制构造函数调用来创建本地对象的副本,这就是调用者收到的.

编译器可能会在一个称为copy elision的进程中删除该副本,但这是由编译器自行决定的 – 您没有太多的控制权.

这种模式能够产生你害怕的问题,但只有当你返回一个指针或者引用本地对象的时候.

猜你在找的C&C++相关文章