Это для домашнего задания в курсе cpp, и я ищу некоторые лучшие практики.
У меня довольно сложный класс, который я хотел бы сохранить в классе связанных списков. Я должен реализовать свой собственный, включая класс узлов. Мне нужно только сохранить этот единственный относительно сложный тип, над которым я работаю.
Должен ли я сделать тип данных узла ссылкой на сложный тип, или я должен сделать вместо него указатель на него?
Опция 1:
class Node
{
public:
Node* prev;
Node* next;
ComplexType *data;
}
Вариант 2:
class Node
{
public:
Node* prev;
Node* next;
ComplexType &data;
}
Предполагая, что мне также придется обрабатывать различные случаи копирования значения при работе с эталонным решением. Какой из них считается более правильным? И почему?
Как только ссылка инициализируется, ее нельзя изменить снова, чтобы ссылаться на что-либо еще. Поэтому ваш список будет более полезным/гибким, если вы будете придерживаться указателей.
Я бы пошел на вариант 2. Ваши предыдущие и следующие должны быть указателями, поскольку они могут измениться. Данные узлов не должны изменяться в списке. Только его позиция в списке должна изменяться путем изменения указателей prev/next. На мой взгляд, это всегда лучше, если вы можете предотвратить использование указателей там, где это возможно, но в этом случае ваш предыдущий/следующий член должен быть указателем, поскольку они могут измениться.
Предположительно вам нужна свобода иметь нулевые data
, а также изменить его после строительства. В этом случае вам понадобятся указатели некоторого разнообразия.
ComplexType
?