При следующих предварительных условиях поведение some_function
четко определено:
other_ptr
должно быть выделено с помощью new
и все еще быть действительным (не удаленным).
- Право собственности на
other_ptr
должно быть передано 1 функции, т. Е. Ничему другому не принадлежит.
node
не должно быть нулевым.
Однако node
, как и все аргументы, является локальным для функции. Когда функция заканчивается, node
уничтожается. Следовательно, указатель, которым он управляет, удаляется. Таким образом, бессмысленно изменять заостренный объект, что и делает функция.
1 Передача права собственности с использованием простого указателя является плохой идеей. Вместо этого вы должны использовать уникальный указатель для передачи права собственности.
P.S. С указателями next
и previous
, Node
выглядит как двусвязный список. Однако это не может быть список, поскольку предыдущий узел и следующий узел не могут иметь уникальное право владения текущим узлом.
P.P.S. Node* node_ptr = node.get(); node_ptr->next.reset...
можно упростить до node->next.reset
.