删除c++中的链接列表下一个指针
Deleting a linked list next pointer in c++
我理解这可能是一个非常基本的问题,但如果你在c++中有一个非常简单的链表,比如。。。
class link{
link * next;
~link(void){
delete next;
}
}
如果在这个链表的头上调用析构函数,并且它指向下一个节点的指针被删除,那么下一个结点的析构函数会被调用吗?实际上,调用头上的析构函数会删除列表中的所有链接。还是名单上的其他部分就挂在那里?
link
,那么当你使用运算符new创建这种类型的对象时,链接的构造函数被称为
link *node = new link;
当您删除使用new创建的对象时,其析构函数称为
delete node;
在您的示例中,next
是类型为link
的对象(指向使用运算符new创建的对象的指针),与持有它的对象相同。因此,当对其应用操作或删除时,将调用其析构函数。
是的,当你删除对象时,它的析构函数会被调用。因此,在这个实现中,删除节点后的所有节点(或链接,如果你愿意的话)也会被销毁。
是的,除了next是私有的,所以永远不能被任何东西设置(你没有方法或朋友)如果你要有从链接派生的链接,那么析构函数应该是虚拟的,这样正确的代码(而不仅仅是link::~link由delete调用)。您确实需要删除next,因为它是指向对象实例的指针。如果没有delete,则什么都不会发生(指针的析构函数不会删除它所指向的对象)。
相关文章:
- 重新定位图像时如何前进到下一个内存块
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 用于在 C++ 中使用 while 循环查找下一个素数的简单函数
- CIN 仅在输入非数字值时跳过下一个 CIN
- 查找最小的下一个更大的元素
- 转到基于范围的 for 循环中的下一个迭代器
- 动态分配列表 - 创建一个函数,用于删除所有包含偶数值的元素
- 如何检查流中文件的下一个单词是否为 alpha?
- 如何打印下一个字母直到 Z 并继续到 A?
- 在使用堆栈为下一个最大数字编写代码时面临 SIGSEGV(分段错误)
- 如何将列表从一个类复制到另一个类
- 使用一个内存集数组和单个堆栈在 O(n) 中查找数组的下一个更大元素
- 有没有一种标准方法可以在C++中获取第 n 个"下一个"浮点值
- 如何合并两个双重链接列表(访问下一个链接)
- 取消下一个节点的空链接列表的头
- 利用双重链接列表中的下一个指针
- 如何在链接列表中访问下一个C
- 在列表迭代器中设置下一个对象
- 转到下一个节点的C++链接列表错误
- 删除c++中的链接列表下一个指针