有C中的建议++:“不要返回引用到局部对象”,如下面的“C++入门”引述::永远不会返回对本地对象的引用?
“有了解有关返回引用一个极其重要的一点:永远不会返回到基准的局部变量。
“当一个函数完成,其中,所述局部对象所分配的存储被释放。函数终止后,对本地对象的引用指未定义的内存。考虑下面的函数:。
// Disaster: Function returns a reference to a local object
const string &manip(const string& s)
{
string ret = s;
// transform ret in some way
return ret; // Wrong: Returning reference to a local object!
}
“,因为它返回到本地对象的引用该函数将在运行时失败当函数结束时,其中保留驻留被释放存储的返回值是指存储器该程序已不再可用。“
问:那么,这是否仍适用于C#?或者随着GC的推出,这并不重要?
我不同意“这一功能会在运行时失败。”它*可能*失败,并且不安全。但在很多情况下,存储将在返回后的一段时间内可用,通常会使这类问题难以调试。 – abelenky
abelenky是正确的;无论如何,任何事情都不会失败。无论如何,存储不是“被释放”的要求。这样做的程序可以按照你想要的方式工作 - 你可能会很幸运 - 或者它可能导致整个系统崩溃,或者它可能会擦除硬盘。它可以做*任何*。有关更多想法,请参阅http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope/6445794#6445794。 –