2016-06-26 5 views
1

をコピーします。私は2つのtreetype要素を持っている場合C++は、バイナリツリー

BinaryTree& operator=(const BinaryTree &rhs){ 
    if (&rhs == this){ 
     return *this; 
    } 
    _Destroy (m_root); 
    m_root = _Copy (rhs.m_root); 
    return *this; 
} 

を、その後tree_1tree_2

私は

tree_2 = tree_1; 

を行うと、私はtree_1からtree_2にすべての要素をコピーします。 この時点で、tree_2に新しいノードを追加します。 tree_1も変更されます。 tree_2の構造を変更するだけで、tree_1は同じままになる新しい再帰コピー機能を設定するにはどうすればよいですか?

使用しているdefultコピーCTOR;

+0

なぜコピーコンストラクタを定義するのではなく、 '_Copy'関数を定義していますか?一般に、代入演算子を定義する場合は、コピーコンストラクタも定義する必要があります。また、ディープコピー/割り当てのセマンティクスを定義する必要がある場合は、関連する各タイプに対して行う必要があります。また、このコードはメモリリークがいっぱいです。 –

答えて

-1

は、あなただけのノード要素BTNODE =演算子

thatsの道ルートコピー のためにその仕事あなたは木をコピー[tree_2 = tree_1]をオーバライドそのcが、あなたがallreay「=」演算子が実装foreachのノード を使用するツリーの CTORコピーを作成する必要がありますビット単位のコピー(ディープコピー) を使用 提供++

node *Cpy(root) { 

    if (root == NULL) : return root; 

    node *temp = new node(); 
    temp->data = root-> data;  

    temp->left = Cpy(root -> left); 

    temp->right = Cpy(root -> right); 

    return temp; 
} 
+1

あなたの答えは少し英語を向上させるようにしてください。 –

+0

少なくともshared_ptrなどを使用してください。これは狂ったように漏れるだろう。また、デフォルトのコピーコンストラクタはディープコピーではありません。 –

+0

あなたは私がオペレータ= –

関連する問題