void clear() {
node *next;
for (node *temp = m_head; temp; temp = temp->m_next) {
next = temp->m_next;
delete temp;
temp = next; // 錯誤:for 迴圈第三句仍會執行 temp = temp->m_next,導致跳過節點、訪問已釋放記憶體
}
m_head = nullptr;
}
void clear() {
while (m_head) {
node *next = m_head->m_next;
delete m_head;
m_head = next;
}
}
或 C++11 範圍 for (需先收集指標):
void clear() {
std::vector<node*> all;
for (node *p = m_head; p; p = p->m_next) all.push_back(p);
for (node *p : all) delete p;
m_head = nullptr;
}
empty() 回傳 size() (int),語意反轉:空時應回傳 true,建議 return m_head == nullptr;。locate() 使用未宣告的 head (應為 m_head)。List(const List&) 中 while (const_iterator it = l.begin(); ...) 語法錯誤,應為 for (auto it = l.begin(); it != l.end(); ++it)。operator->() 正確回傳 T* (現回傳 node*)。教學/面試手寫容器可練習;生產代碼**直接使用 std::list 或 std::forward_list**,經過嚴格測試、零成本抽象、支援分配器、除錯器可視化。