获取本地对象的const引用

时间:2017-11-09 11:56:33

标签: c++ compiler-errors reference const c++03

考虑一下:

std::vector<std::string> f() //some irrelevant function
{
    std::vector<std::string> tempCol;
...//some more irrelevant stuff
    return tempCol;
}

const std::vector<std::string>& refToLocal = f();

我知道这可以完美地编译和运行。我甚至知道即使在生产代码中也使用了各种各样的东西。 所以问题是,在函数范围之后是否必须删除本地对象?参考文献如何附加&#39;必须删除本地对象???

1 个答案:

答案 0 :(得分:3)

函数执行完毕后,

tempCol(局部变量)被销毁。函数的返回值是tempCol副本

通常,返回值的生命周期作为评估其出现的完整表达式的最后一步结束(在本例中为... = f();),但是因为您将它绑定到引用(refToLocal ),它的生命周期扩展到它所绑定的引用的生命周期。

当变量refToLocal超出范围时,它和函数返回值都被破坏并回收内存。

查看https://stackoverflow.com/a/17903361/2428220以获取有关C和C ++中函数返回值生存期的更详细说明。