二重リンク リストのノードのコピー代入演算子を作成しようとしています。ただし、次のコードでスタック オーバーフローが発生します。
template <class DataType>
ListNode<DataType>& ListNode<DataType>::operator=(const ListNode<DataType>& Node)
{
if(this == &Node)
return *this;
else
{
if(Child != NULL)
delete Child;
if(Parent != NULL)
delete Parent;
if(Node.Child != NULL)
{
Child = new ListNode<DataType>();
*Child = *Node.Child;
}
else
Child = NULL;
if(Node.Parent != NULL)
{
Parent = new ListNode<DataType>();
*Parent = *Node.Parent;
}
else
Parent = NULL;
_data = Node._data;
}
return *this;
}
このようなノードをコピーする標準的な方法は何ですか?これを実現するには、他の手段 (つまり、コピー代入演算子ではない) を使用する必要がありますか? 既存のプログラムを大量に書き直す必要があるため、できるだけ避けたかったのです。この関数は、単独でリンクされたリストではうまく機能するようですが、親ポインタのコピーを追加すると、問題が発生するようです。理由を特定することも、この関数を記述する別の方法を考えることもできないようです。