Перегрузка оператора присваивания / копирования, когда класс использует себя / глубокое копирование

Моя проблема в том, что у меня есть класс, который имеет в качестве объекта себя. Когда я пытаюсь написать метод присваивания или копирования, я заканчиваю своего рода «классификацией»

сокращенный класс:

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, поэтому я бы оказался в бесконечном цикле.

Как правильно копировать этот класс?

Надеюсь, что кто-то может дать мне подсказку 🙂

С уважением

0

Решение

Здесь не происходит бесконечного цикла, потому что оба объекта имеют тип Node*таким образом, конструктор копирования не вызывается в этом выражении. Действия между указателями определенного типа полностью отделены от действий между объектами этих фактических типов.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector