我正在实现一个类Set,有一个成员函数,讽刺地称为member,如果传递的值在集合中,则返回true,否则返回false。我的问题是,如果我正在创建一个临时节点来迭代以搜索该值,那么我是否需要在使用完该临时节点后删除该临时节点以将内存返回到堆中,因为它不是从函数中返回的?
在这个类中,节点作为私有结构嵌入类Set中,如下所示:
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;
}
否。
tempNode
只是一个非静态局部变量,具有自动存储持续时间;它的范围仅限于函数的开始和结束。当函数返回时,它将自动解除分配。
member
函数不分配任何堆内存(没有new
或malloc
调用)。将在堆栈上分配tempNode
变量(大小为sizeof(Node*)
)。
当函数退出时,整个函数(包含tempNode
)的激活记录将自动解除分配,因此无需进行进一步的清理。
代码是正确的。