类使用自身/深度复制时赋值/复制操作符重载



我的问题是,我有一个类作为自己的对象。当我尝试编写赋值或复制方法时,我以一种"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类型的对象,因此我将在一个无限循环中结束。

如何正确地深度复制这个类?

希望有人能给我一个提示:)

这里没有发生无限循环,因为两个对象都是Node*类型,因此在该表达式中不会调用复制构造函数。特定类型的指针之间的操作与实际类型的对象之间的操作是完全分开的。

最新更新