当类使用自身/深层复制时,赋值/复制运算符重载

时间:2013-01-02 23:29:48

标签: c++ pointers overloading deep-copy

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

结束

缩短的课程:

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类型的对象,所以我最终会陷入无限循环。

如何正确深度复制此课程?

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

此致

1 个答案:

答案 0 :(得分:0)

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