假设我有一个双向链表,例如
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->value;
在我之前明确delete v;
吗?当您有各种指针时,我对删除内存的工作方式感到困惑。