C++链表节点删除方法,如何合适的释放内存
让我先描述下……
实现这样一个方法,删除不带头单链表中与val值相同的结点
方法签名:
ListNode* removeElements(ListNode* head, int val);
ListNode类声明
class ListNode {
public:
ListNode(int x) : val(x), next(NULL) {}
int val;
ListNode *next;
};
逻辑很简单,当
// ...
pre->next = p->next;
// ...
之后,一般的做法是
delete p;
但这时,有个问题。当主调函数中写如下调用时,会出内存问题
ListNode n0(0), n1(1), n2(2);
n0.next = &n1;
n1.next = &n2;
// ...
removeElements(&n0, 2);
n2结点的内存是不可delete的……
另外,如果在removeElements方法中不写delete逻辑,如果主调函数中,链表结点是new出来的,则不delete会内存泄露
So… 我想问一下,在实现类似的C++函数时,有什么一般的做法,或者业内默认规定?
或者,有没有更nice的处理方式?能让方法比较安全且避免内存泄露
多谢 :-)
johnct
10 years, 4 months ago