【发布时间】:2012-12-09 10:37:47
【问题描述】:
假设我有一个双向链表,例如
class list
{
/*...*/
private:
struct node
{
node* prev;
node* next;
int* value;
}
node* first; //NULL if none
node* last; //NULL if none
/*...*/
}
如果我想写一个函数来删除第一个节点并返回一个指向其值的指针,这个实现会泄漏内存吗?
int* returnFrontValue()
{
if(list_is_Empty())
throw -1;
else
{
node* v = first;
int* returnMe = v->value;
first = first->next;
if(!first)
last = NULL;
delete v;
first->prev = NULL;
return returnMe;
}
}
我很好奇这个实现是否会泄漏内存,因为returnMe 指向一个动态分配的 int。使用int returnMe = *(v->value); 并在最后返回&returnMe; 会更好吗?
我必须在delete v; 之前明确地delete v->value; 吗?当您有各种指针时,我对删除内存的工作方式感到困惑。
【问题讨论】:
-
返回一个局部变量的地址?绝对不会更好。
-
为什么每个节点都有一个指向动态分配的
int的指针,而不是简单的int成员? -
@interjay 如果是会员,
delete v会销毁它 -
@Evgeni 所以?在删除之前复制它。
-
@jalf 是的,按值返回将是一个解决方案。
标签: c++ linked-list