gpt4 book ai didi

c++ - 从 C++ 中的链表中删除节点

转载 作者:行者123 更新时间:2023-11-30 02:57:46 25 4
gpt4 key购买 nike

我正在尝试学习 C++,但我有一点困惑。

我正在学习的文本告诉我,如果我想删除类型为 const T& 的节点,我应该首先创建一个该节点类型的新指针,然后使用内置的 C++ 删除它删除[]。但是,如果我只是设置从待删除节点的上一个元素到待删除节点的下一个元素的链接,会发生什么?像这样的东西:

*p = node.previous;
p-> next = node.next;

或者这会导致内存泄漏吗?

我很困惑,因为我在其他地方读到永远不会随意删除指针,但是我正在使用的示例代码具有以下内容:

Node<T> *p = node-to-be-deleted;
delete p;

删除节点的最佳方式是什么?

最佳答案

假设您的节点如下所示:

struct Node
{
Node* previous;
Node* next;

SomeType data;
};

然后:

*p = node.previous;
p-> next = node.next;

然后。这将导致内存泄漏。
它还使 p->next->prev 指向错误的节点。

I'm confused because I read somewhere else to never, ever delete pointers willy-nilly, but the example code I am working with has something along the lines of:

是的,最好的方法是“永不删除指针”。但这必须伴随着一些背景。您不应该手动删除指针,因为指针应该由控制其生命周期的对象管理。这些对象中最简单的是智能指针或容器。但对于这种情况,这会有点矫枉过正(因为您正在创建容器)。

当您创建容器(列表)时,您需要自己进行管理(注意 C++ 已经有几个丢失的类型 std::list 用于 t 类型的值列表或 boost::ptr_list 用于 a指向 T 的指针列表)。但是自己尝试做是一个很好的练习。

下面是一个初学者的代码审查示例,列出了 list 及其生成的评论:

http://codereview.stackexchange.com : Linked list in C++

我希望这有助于解释如何创建和删除对象。

关于c++ - 从 C++ 中的链表中删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14204458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com