簡單的變數宣告 new 或 不用 new |
答題得分者是:aftcast
|
alumi
一般會員 發表:1 回覆:1 積分:0 註冊:2004-01-27 發送簡訊給我 |
void function1()
{ String Str; do domething here ..... } void function2() { String *Str = new String; do domething here ..... delete Str ; } 2種宣告方法 結果都一樣運作OK 不太確定 編譯器 是否呼叫函式1後 宣告的變數 完成後 會自動釋放宣告配置的記憶體 還是要用 new 的方式 然後 delete 我認為 有 new 跟 delete 我比較能把握記憶體真的被釋放 但是 宣告都要 new delete 很麻煩 不知道是不是我多慮 有人比較過嗎? |
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
你好,
你的問題真的是多慮了。從理論上來說Strin這個類別不用new才是最快最好的方法,而我曾實測與反組譯的結果也是如理論一樣的結果。所以,放心用! new與不new差在物件的資料成員是否建構在heap上或stack上。若是stack上,即不new的情形,編譯器是會在function結束前自動去把物件release掉! 若你使用new,那就要自己去delete。也許你會問: 這麼好的事,那我為何要new? 而 vcl 的說明中又講許多的物件都要new… 原因是: 若你把stack拿來存「所有資料成員」,有時候是不夠放的,stack的大小是有限的,不然可能會stack overflow… 以string來說,其實成員只用約8bytes左右(詳細的大小我有點忘), 所以不會overflow。其他的類別則就不一定那麼小了… 你是否想問真的只有8bytes左右? 你明明就放一堆的字串,超過8bytes? … 你真的放的字串會由string類別自動的放在heap上,它的成員,即data其實放的是一個指標加上reference的大小。而當解構時,類別也會自動的把heap上的字串給幹掉,這你不用擔心。幹掉heap後,data自己的8bytes左右才會被幹掉!
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |