有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。 –