0

我的问题是,我有一个作为自身对象的类。当我尝试编写作业或复制方法时,我会以一种“classception”结束

缩短课程:

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;
};

和方法(只有一个,因为它几乎相同)

// 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

这里没有无限循环,因为两个对象都是 type Node*,所以复制构造函数不会在该表达式中被调用。某种类型的指针之间的动作与那些实际类型的对象之间的动作完全分开。

于 2013-01-02T23:36:31.877 回答