《 在 neverbig. 的大作中提到: 》
: ※ 引述《
manho...@bbs.badcow.com.tw (還在喔)》之銘言:
: > char stfun(char *pstr,int n)
: > {
: > int i;
: > char *cp=new char[n+1];
: > for(i=0;i<n;i++)
: > {
: > cp[i]=pstr[i];
: > }
: > cp[i+1]="\0";
: > return cp;
: > }
: >因為他程式給我的感覺是複製字串..
: >既然是複製那應該是要求得新的字串(位址).
: >所以回傳 char*, 而不是 char
: 你好,我想隱性生物兄說得是對的,很單純的只是,傳回值之型態不符,
: 因為我正好研讀到這一部分,也有問題請問大家:
: 由於在stfun中的有new之記憶體配置,
: 因此在呼叫之後,必需以對應之delete處理,才不會有memory leak之問題。
: 1.這樣的話,呼叫者從那裡去得知它在呼叫stfunc後必需佐以delete指令?(如果沒有程式原始碼可看)
: 是其傳入參數及傳回值型態嗎?
: 2.stfunc在內部用了new,它如何告知呼叫者要用delete?
: (即stfunc有這個責任和義務嗎?)
: 3.又,如果1,2都沒有適當的方式,
: 是不是表示得到物件導向的class,用constructor,destructor來規劃?
: 以下問題,還請各位先進惠予解答,謝謝。
Delete 的工作是由Programer來執行,所以Programer要知道誰是這個記憶體的最後擁有
權(不可否認是C++要特別小心的地方),所以當你呼叫此Function得到一個指標時,
Programer就必須在用完時Delete它,因為擁有權已經轉到Programer的手上了。
當然這可以延伸很多問題,如:若是多執行緒都共用這個回傳的記憶體時,何時該釋放掉
也是一個有趣的問題。
--
[m [1;34m※ 來源:‧蛋捲廣場 bbs.tku.edu.tw‧[FROM: 61.59.210.44] [m