在链接列表中使用唯一指针是否有意义?

时间:2018-09-19 17:22:17

标签: c++ smart-pointers

对于ListNode类,我有以下设计。我在这里并不特别在意执行效率,因此我使用的是递归函数而不是简单的循环。

shared_ptr<Node> Node::insert(int value) {
  if (value == this->datavalue) {
    // we have already seen this value: just count
    datacount++;
    return shared_from_this();
  } else if (value < this->datavalue) {
    // insert before current
    auto newhead = shared_ptr<Node>( new Node(value) );
    newhead->next = this->shared_from_this();
    return newhead;
  } else if (next == nullptr) {
    // insert after current, and current is the tail
    this->next = shared_ptr<Node>( new Node(value) );
    return shared_from_this();
  } else {
    // insert after current, which is not the tail
    auto newtail = next->insert(value);
    this->next = newtail;
    return shared_from_this();
  }
};
void List::insert(int value) {
  if (head == nullptr) // list is empty; make first node
    head = shared_ptr<Node>( new Node(value) );
  else // insert this value somewhere
    head = head->insert(value);
};

在这里我不知道如何使用唯一指针。 Node::insert例程在一种情况下返回shared_from_this,在另一种情况下返回新节点。所以我有点需要unique_from_this,我知道这个需求不存在。

我可以保持这种设计,还是应该在列表上写一个大的while循环?

我在上面确实应该使用make_shared

0 个答案:

没有答案