【发布时间】:2015-11-20 19:58:35
【问题描述】:
我正在实现一个类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没有被分配,你将它指向同一个地方list指向。 -
嗯,好吧,我想这遵循了每当使用关键字new时都使用delete的原则,我没有这样做。谢谢
-
我假设您的 Set 用于分配。作业完成后,如果你想了解更多关于指针和存在的信息,我建议你看一下smart pointers。很多时候(恕我直言,大多数时候)您不必明确使用
new/delete。 -
如实说明,我会这样做的。谢谢!!
-
@wendelbsilva,好吧,即使在美丽的新世界中,也有很多情况下您必须明确使用
new。
标签: c++ pointers linked-list set