考虑到这一点:
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();
我知道它编译和运行都很完美。我甚至知道,即使在生产代码中也有不同的用法。那么问题是,在函数作用域之后是否必须删除本地对象??引用“附加”如何删除本地对象?
发布于 2017-11-09 04:06:25
tempCol
(局部变量)在函数完成执行时被销毁。函数的返回值是tempCol
的副本。
通常,返回值的生存期作为计算其发生的完整表达式的最后一步结束(在本例中为... = f();
),但由于要将其绑定到引用(refToLocal
),因此它的生存期将扩展到绑定它的引用的生存期。
当变量refToLocal
超出作用域时,它和函数返回值都被破坏,内存被回收。
查看https://stackoverflow.com/a/17903361/2428220,了解C和C++中函数返回值的生存期的更详细说明。
https://stackoverflow.com/questions/47201231
复制相似问题