評價: 0 回應: 0 閱覽: 91
置頂

物件可否call by value?

請問物件、結構等複合型態,可否call by value?


我知道這問題可能很基本,但我問了朋友跟同事,沒有人能給我一個肯定的答案,
所以還是厚著臉皮上來請教各位先進了。

因工作關係開始寫MFC,開始學著C++的物件怎麼用。
但我一直疑惑著,複合型態是否真的無法使用call by value呢?

我知道像是陣列、結構、物件這種複合型態,一般來說都call by pointer/reference。
而複合型態的名稱,等同於它在記憶體裡面的起使位置。

那麼,如果我碰到底下這種狀況
"在function call產生的複合型態物件,要回傳到主程式中"
此時我不能用call by pointer/reference,
因為程式一離開function,產生的物件就消失了。

所以我猜想是否能寫成改為call by value,像底下這樣...

class CA;
int main()
{
   CA obj_A = fun1();
   ...
}

CA fun1()
{
   CA fun_obj = ...
   return fun_obj;
}

我使用VC2008測試結果是可以的,結果正確。
那麼,complier是否在return物件時,把fun_obj的內容,完全拷貝給obj_A?
所以實際上,複合物件也是可以call by value?


當然我也想的到像這種情況,另一個作法是,先在main裡面把obj_A宣告,
然後用call by reference傳給fun1(),
使得fun1()直接將運算結果寫在obj_A的位址,改成像這樣...

class CA;
int main()
{
   CA obj_A;
   fun1(obj_A);
   ...
}

void fun1(CA& fun_obj)
{
   fun_obj=...
}

但我想弄清楚,複合型態物件,其實是可以call by value的,是嗎?

會員登入 (先登入會員才能回覆留言喔!)

Facebook留言