Re: [問題] return的區域變數scope?

看板C_Sharp (C#)作者 (光和影的謎題)時間20年前 (2005/09/13 10:55), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/5 (看更多)
※ 引述《tomex (tomex_ou)》之銘言: : 假如有個一函數傳回DataTable物件: : DataTable GetDataTable() : { : DataTable dt = new DataTable(); : ... : return dt; : } : DataTable dt1 = GetDataTable(); //這行是正常的, dt1指向dt記憶體位置 : dt1.Rows(); // dt是區域變數物件,scope已消失,隨時被回收, dt1危險! : 最近學c++,特別重視記憶體管理, : 以前用c#都沒在乎dt是有scope範圍的local變數, : 現在好像覺得蠻危險的。 : return string比較沒問題,因為string接收時都採複制1份新的記憶體空間 : 但物件似乎不是如此 : 雖然gc沒那麼快回收,但終究是超出scope範圍的變數, : 大家怎麼看這問題呢? 你忽略了很基本的問題: 1.scope和動態配置(new)的記憶體空間是不相關的 所以new出來的東西不會因為scope而釋放, 另外覺得你對C#的GC似乎 也不是很瞭解, C#的GC在回收時只會回收完全被沒有被參考到的物件, 所以dt1參考的物件是不會被回收的, 我覺得你需要去看看GC的運作機制. 2.在C#裡除了數值型別, 其他型別不加方法參數都是傳參考(包括string) 所以string接收時不會複制1份新的記憶體空間. -- 智慧 是成功的任意門 信心 是成功的促進劑 機緣 是成功的必需品 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.141.225 ※ 編輯: NCRCD 來自: 140.113.141.225 (09/13 13:34)
文章代碼(AID): #139Z-LI2 (C_Sharp)
文章代碼(AID): #139Z-LI2 (C_Sharp)