В вашем примере vector<Node>
будет хранить копии ваших узлов, поэтому будут скопированы t1
, t2
.
Кроме того, конструктор копирования по умолчанию для Node
сделает "мелкий"копия.Таким образом,
Node* head = new Node();
Node* next = new Node();
head->other_node = next;
Node* other_head = new Node(*head);
*(other_head->other_node)
- это тот же узел, что и *(head->other_node)
Вам решать, следует ли вам это поведение.
Относительно деструкторов: вы должны только удалить / освободитьпамять, которую выделил экземпляр вашего класса, если у вас нет веских причин для того, чтобы стать владельцем памяти.В случае вашего списка, в общем, поскольку ваш список не выделил память, указанную other_node
, он не должен ее удалять.
Производительность целесообразна, поскольку ваш узел достаточно недорог для копирования (int иуказатель), хранение копии в порядке.Если ваш класс Node сделал глубокое копирование, то с точки зрения производительности было бы лучше использовать vector<Node*>