程式碼中 Line(Point xp1, Point xp2) 參數以傳值方式接收 Point 物件,導致建構 Line 時觸發 4 次 Point 拷貝建構式;拷貝建構 Line 時再觸發 2 次。
Line line(myp1, myp2); 呼叫建構式:
myp1 傳值給形參 xp1 → 第 1 次拷貝。myp2 傳值給形參 xp2 → 第 2 次拷貝。: p1(xp1), p2(xp2) 以形參初始化成員 → 第 3、4 次拷貝。Line line2(line); 呼叫拷貝建構式:
: p1(L.p1), p2(L.p2) 以來源物件成員初始化新成員 → 第 5、6 次拷貝。// 建構式
Line(const Point& xp1, const Point& xp2) : p1(xp1), p2(xp2) { ... }
// 拷貝建構式
Line(const Line& L) : p1(L.p1), p2(L.p2) { len = L.len; }
const 允許綁定暫時物件與常量。若 Point 管理資源(動態記憶體等),可提供移動建構式 Point(Point&&) 並配合 std::move 實現零拷貝轉移。
核心原則:非基本型別參數優先用 const 參考,需修改時用非 const 參考,極少數情況(如需副本)才傳值。