Моя проблема в том, что у меня есть класс, который имеет в качестве объекта себя. Когда я пытаюсь написать метод присваивания или копирования, я заканчиваю своего рода «классификацией»
сокращенный класс:
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*
таким образом, конструктор копирования не вызывается в этом выражении. Действия между указателями определенного типа полностью отделены от действий между объектами этих фактических типов.
Других решений пока нет …