0

私の問題は、それ自体のオブジェクトとして持っているクラスがあるということです。割り当てまたはコピーメソッドを書き込もうとすると、一種の「クラスセプション」で終わります。

短縮されたクラス:

class Node
{
public:
    Node(QString name, Node *parent = 0);
    ~Node(void);

    // copy
    Node(const Node &srcNode);
    // assignment
    Node& operator=(const Node &srcNode);

    private:

    QString name;
    QList<Node*> children;
    Node *parent;
};

と方法(ほとんど同じなので1つだけ)

// Copy
Node::Node(const Node &srcNode)
{
    name = srcNode.name;

    for(int i = 0; i < srcNode.children.size(); i++)
    {
        children.replace(i, srcNode.children.at(i));
    }

    // how is it done?
    parent = srcNode.parent;
}

私の問題はメソッドの最後の行にあります。ご覧のとおり、親もNode型のオブジェクトであるため、無限ループに陥ります。

このクラスを正しくディープコピーするにはどうすればよいですか?

誰かが私にヒントをくれることを願っています:)

よろしく

4

1 に答える 1

0

両方のオブジェクトがタイプNode*であるため、ここで無限ループが発生することはありません。したがって、コピーコンストラクターはその式で呼び出されません。特定のタイプのポインター間のアクションは、それらの実際のタイプのオブジェクト間のアクションとは完全に分離されています。

于 2013-01-02T23:36:31.877 に答える