考虑一下:
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;必须删除本地对象???
答案 0 :(得分:3)
tempCol
(局部变量)被销毁。函数的返回值是tempCol
的副本。
通常,返回值的生命周期作为评估其出现的完整表达式的最后一步结束(在本例中为... = f();
),但是因为您将它绑定到引用(refToLocal
),它的生命周期扩展到它所绑定的引用的生命周期。
当变量refToLocal
超出范围时,它和函数返回值都被破坏并回收内存。
查看https://stackoverflow.com/a/17903361/2428220以获取有关C和C ++中函数返回值生存期的更详细说明。