New Assignment Operator List& List::operator=(const List &o) { if (this == &o) return *this; Node::delete_chain(head); head = Node::deep_copy(o.head); return *this; } Much better