LONGEPASS
電腦軟體設計(C++)/C++/Q140
困難
正確率 -
Q140.

下列有關C++的敘述那些是正確的?

電腦軟體設計(C++) · 乙級 · C++ · Q140

難易度分析

4 / 5

本題採多選形式,且要求對 C++ 物件複製機制及不同成員類型的記憶體處理行為有精確的辨析能力,需排除易混淆的干擾選項,因此難度較高。

正確答案 (複選):②, ④

  • ② 沒有設置複製建構子的類別仍然可以進行兩物件複製:即使類別未明確宣告複製建構子,C++ 編譯器仍會自動產生一個隱含複製建構子,以淺層複製(shallow copy)方式逐一複製所有資料成員,因此兩物件之間仍可進行複製運算。
  • ④ 通常類別中包含指標(Pointer) 成員,並在宣告物件時需要做物件內容之複製,則需要宣告一複製建構子:當類別包含指標成員且指向動態配置的記憶體時,預設複製建構子僅複製指標位址而非目標資料,會造成淺層複製問題,可能引發double free或dangling pointer。此時必須自訂複製建構子以實現深層複製(deep copy)。

錯誤選項解析

  • ① 每個類別都需要一個複製建構子(Copy Constructor):並非每個類別都需要複製建構子。若程式設計師未自行定義,編譯器會自動產生預設複製建構子,執行成員逐一複製(member-wise copy)。只有當類別管理動態配置資源時,才必須自訂複製建構子。
  • ③ 通常類別中包含陣列成員,並在宣告物件時需要做物件內容之複製,則需要宣告一複製建構子:陣列成員在預設複製建構子中會逐元素複製,屬於值語意(value semantics),不會產生懸空指標或重複釋放問題,因此僅包含陣列成員時通常不需要自訂複製建構子。
Learning Tip

"本題核心考點為複製建構子的必要性與深層/淺層複製的區別。常考陷阱:(1) 誤以為所有類別都需要複製建構子,實際上編譯器會自動提供預設版本;(2) 混淆陣列與指標的複製行為——陣列逐元素複製是安全的,但指標僅複製位址會造成資源管理問題。實務上遵循Rule of Three:若類別需要自訂解構子、複製建構子或複製指派運算子其中之一,通常三者都需要自訂。"

學員答題分佈

①每個類別都需要一個複製建構子(Copy Constructor)0%
②沒有設置複製建構子的類別仍然可以進行兩物件複製0%
③通常類別中包含陣列成員,並在宣告物件時需要做物件內容之複製,則需要宣告一複製建構子0%
④通常類別中包含指標(Pointer) 成員,並在宣告物件時需要做物件內容之複製,則需要宣告一複製建構子0%

此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!

相似類型題目