我的問題是,我有一個類作爲其自身的一個對象。當我嘗試寫轉讓或複製方法,我最終在一種「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類型的一個對象,所以我最終會陷入無限循環。
如何正確複製此類?
希望有人可以給我一個提示:)
問候
你怎麼知道你最終在一個無限循環?它們是指針,而不是實際的對象。 – 0x499602D2
您是否嘗試過使用它?它不應該是一個指針的問題。但是,這不是一個「深層複製」,你只需要改變指針。 – Matzi
實際上,'parent'的類型是'Node *',而不是節點。該賦值不應觸發遞歸分配/複製,因爲您不復制節點對象,而是指向節點的指針。 –