2013-01-02 12 views
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類型的一個對象,所以我最終會陷入無限循環。

如何正確複製此類?

希望有人可以給我一個提示:)

問候

+2

你怎麼知道你最終在一個無限循環?它們是指針,而不是實際的對象。 – 0x499602D2

+0

您是否嘗試過使用它?它不應該是一個指針的問題。但是,這不是一個「深層複製」,你只需要改變指針。 – Matzi

+1

實際上,'parent'的類型是'Node *',而不是節點。該賦值不應觸發遞歸分配/複製,因爲您不復制節點對象,而是指向節點的指針。 –

回答

0

沒有無限循環會在這裏,因爲這兩個對象是Node*型的,所以拷貝構造並不在被調用表達。特定類型的指針之間的操作與這些實際類型的對象之間的操作完全分離。

+0

@MooingDuck我並沒有想直...編輯 – 0x499602D2

+0

啊好的 - 是一個深層複製所需的QList ?也只是孩子= srcNode.children; ? – Michael

+0

@Michael是的,它應該以同樣的方式工作。 – 0x499602D2