Поскольку это домашнее задание, я постараюсь дать идею, из которой вы можете выяснить, что вам нужно делать с конструкторами копирования.
Node(const Node& copyNode) : data(copyNode.data),
next(copyNode.next)
{
// ....
}
В приведенном выше фрагменте кода вы просто делаетеnext
чтобы указать местоположение, на которое указывает copyNode::next
.Таким образом, вы сталкиваетесь с проблемами, когда какой-либо из указателей освобождает ресурс, на который он указывает, оставляя другой висячий .
Итак, вы должны указывать next
каждый экземпляр, чтобы указатьк месту, которое он независимо держит.Итак, -
Node(const Node& copyNode) : data(copyNode.data),
next(new Node)
{
(*next) = *(copyNode.next) ;
// ....
}
Также прочитайте эту ветку, которая имеет превосходное объяснение - Правило трех