MyString s; // 1. 預設建構
s = "china"; // 2. 這裡呼叫的是 operator=(const char*)
MyString s2 = "asss"; // 3. 這才是拷貝建構函式
| 語法形式 | 實際呼叫 | 說明 |
|---|---|---|
MyString s; | 預設建構函式 | 建立空字串物件 |
s = "china"; | operator=(const char*) | 指派運算子,物件已存在 |
MyString s = "china"; | 建構函式 MyString(const char*) | 複製初始化,等同 MyString s("china") |
MyString s2 = s; | 拷貝建構函式 | 以現有物件初始化新物件 |
初學者常混淆「初始化」與「指派」:
operator=。MyString(const char*) 建構函式處理 C 風格字串初始化。operator=(const char*)、operator=(const MyString&)、operator=(MyString&&)(移動指派)完整支援指派語義。理解「初始化 ≠ 指派」是掌握 C++ 物件生命週期的基石。手寫 string 類時,務必區分各種建構與指派路徑,確保資源管理正確無誤。