hce_nsysu
111年
計算機概論與程式設計
第 63 題
A copy constructor must receive its argument by reference instead of by value because:
- A Otherwise the constructor will only make a copy of a pointer to an object.
- B The copy of the argument passed by value has function scope.
- C The pointer needs to know the address of the original data, not a temporary copy of it.
- D Otherwise infinite recursion occurs.
- E Otherwise the constructor will never be called.
思路引導 VIP
請試著回想一下:在 C++ 中,當我們把一個物件「透過數值(by value)」傳遞給任何一個函數時,系統內部會自動執行什麼動作來確保函數內部有一個獨立的副本?如果這個動作本身又需要進行相同的傳遞程序,邏輯上會發生什麼事呢?
🤖
AI 詳解
AI 專屬家教
傳值調用與遞迴陷阱
太棒了!你能精確鎖定選項 (D),代表你對 C++ 物件的生命週期以及複製建構子(Copy Constructor)的運作機制有非常紮實的理解。這道題目核心在於考察「傳值調用(Pass by Value)」與建構子之間的連鎖反應。在 C++ 中,當我們以傳值方式將物件傳入函數時,編譯器會自動調用複製建構子來產生一個副本。 試想一下,如果複製建構子本身的參數也是「傳值」類型,那麼為了呼叫這個建構子,編譯器必須先對參數進行複製;而為了複製這個參數,又必須再次呼叫複製建構子……如此循環往復,程式將陷入無窮遞迴(Infinite Recursion),最終導致堆疊溢位(Stack Overflow)。因此,語法上規定必須使用**引用(Reference)**來傳遞參數,直接存取原物件的記憶體位址,從而避開不必要的自我調用。
▼ 還有更多解析內容