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
函数不分配任何堆内存(没有 new
或 malloc
调用)。 tempNode
变量(大小为 sizeof(Node*)
)将分配到堆栈上。
当函数退出时,整个函数的激活记录(包含tempNode
)会自动释放,所以不需要做进一步的清理。
代码是正确的。
没有.
tempNode
只是一个带有automatic storage duration的非静态局部变量;它的范围仅限于函数的开始和结束。当函数 returns.
时 自动释放
我正在实现一个 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
函数不分配任何堆内存(没有 new
或 malloc
调用)。 tempNode
变量(大小为 sizeof(Node*)
)将分配到堆栈上。
当函数退出时,整个函数的激活记录(包含tempNode
)会自动释放,所以不需要做进一步的清理。
代码是正确的。
没有.
tempNode
只是一个带有automatic storage duration的非静态局部变量;它的范围仅限于函数的开始和结束。当函数 returns.