Итак, у меня есть самореализующийся класс связанного списка. Для конструктора копирования, который делает «глубокую копию» или, по сути, копию связанного списка. Но для оператора присваивания я в основном сделал это
// assignment operator
linked_list& linked_list::operator=(const linked_list& L){
// check for self assignment
if(this != &L){
this->head=L.head;
this->sz=L.sz;
}
return *this;
}
. Это делает "мелкую копию", поэтому, когда я создаю новый связанный список b и указываю на него, изменения в b будут отражены в ,
Но теперь проблема в том, что когда я вызываю деструктор, который динамически распределяет узлы, поскольку оба они указывают на один и тот же объект, и один из деструкторов вызывается раньше другого, я получаю следующее сообщение об ошибке .
edit.out (3537,0x106bcbdc0) mallo c: *** ошибка для объекта 0x7fa430c018f0: освобожденный указатель не был выделен
edit.out (3537,0x106bcbdc0 ) mallo c: *** установить точку останова в malloc_error_break для отладки прерывания прерывания: 6
Я использовал lldb для проверки любых решений, но я не могу определить, какие объекты будут разрушать объекты называется первым, и как я могу предотвратить повторный вызов.