gpt4 book ai didi

c++ - 这里使用 "delete"真的会删除对象吗?

转载 作者:行者123 更新时间:2023-11-28 02:18:01 24 4
gpt4 key购买 nike

我正在使用 C++ 实现一个 LinkedList,在处理动态分配的内存时,我似乎忘记了一些事情。

我有一个节点类:

class Node {    
public:
Node(int d) {
data = d;
next = NULL;
}

Node(int d, Node* n) {
data = d;
next = n;
}

int data;
Node* next;
};

在我的 LinkedList 类中,我有以下方法:

void remove(int n) {
Node* current;
current = head;
Node* previous = NULL;

while ( current->data != n && current->next != NULL) {

previous = current;
current = current->next;
}

if (current->data == n) {
previous->next = current->next;
current->next = NULL;
delete current;
}
else {
std::cout << "Node not found" << std::endl;
}
}

我似乎忘记了..当我执行 delete current 时,会删除 Node 吗?就像指针 current 指向的实际对象一样?还是只是删除指针?还是使用 delete 删除指向动态分配内存的指针会同时删除指针和对象?或者我是否需要为此定义一个 Node 类析构函数?

最佳答案

它只是删除了它指向的结构 - 在你的例子中是节点 - 你仍然可以使用那个指针 - 让它指向另一个节点 - 实际上没有办法删除指针本身,因为它是在堆栈上分配的。当您离开该功能时,它会自动“删除”。
p.s: 不需要设置 current->next 为 null

关于c++ - 这里使用 "delete"真的会删除对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33432806/

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