C ++删除成员函数中的临时节点?

C++ Delete temporary node in a member function?

我正在实现一个 class 集合,并且有一个成员函数,具有讽刺意味的是称为成员,如果传递的值在集合中,则 return 为真,否则为假。我的问题是,如果我正在创建一个临时节点来遍历以搜索此值,我是否需要在完成此临时节点后将其删除以 return 堆内存,因为它是不是从函数 returned?

在此 class 中,节点作为私有结构嵌入 class 集合中,如下所示:

private:
  //Precondition: linked list is sorted in ascending order
  struct Node {
     int value;
     Node* link;
  };
  Node* list;
  static Node* cons(int x, Node *p);

我指的函数是:

bool Set::member(int x) const {
   if(list == nullptr) 
      return false;

   Node* tempNode = list;

   while(tempNode != nullptr) {
      if(tempNode->value > x) 
         return false;
      if(tempNode->value == x) 
         return true;
      tempNode = tempNode->link;
   }
   return false;
}

您的 member 函数不分配任何堆内存(没有 newmalloc 调用)。 tempNode 变量(大小为 sizeof(Node*))将分配到堆栈上。

当函数退出时,整个函数的激活记录(包含tempNode)会自动释放,所以不需要做进一步的清理。

代码是正确的。

没有.

tempNode只是一个带有automatic storage duration的非静态局部变量;它的范围仅限于函数的开始和结束。当函数 returns.

自动释放