应该删除必须是析构函数中的最后一条语句
Should delete necessarily be the last statement in a destructor?
我在一本(相当受人尊敬的)书中遇到了这段代码。(注:"头"是Element类型的指针)
Stack::~Stack(){
while(head){
Element *next = head->next;
delete head;
head = next;
}
return;
}
根据我的理解,delete关键字会取消分配给指针的内存。作者是如何在取消分配后立即在下一行中使用指针的?这让我有点困惑。我是不是错过了一些显而易见的东西?
作者是如何在取消分配后立即在下一行中使用指针的?
作者正在将指针重新分配给下一个元素。
delete
正在释放磁头指向的内存。它不会"解除分配"指针本身——指针仍然存在并且可用。
然后head = next
使head
指向不同的内存块(由next
指向的块)。被删除的内存再也不用了,所以没有问题。
好问题。类比:老板昨天解雇了鲍勃;今天怎么会有人在鲍勃的桌子旁?
令人困惑的是,通过类比,C++语法不是delete Bob;
,而是delete Bobs_desk;
—这实际上意味着删除Bob办公桌上的员工,但不会删除办公桌。
鲍勃离开后,老板仍然可以让其他人坐在鲍勃的桌子旁。你明白了吗?
相关文章:
- 如何在最后一步使用CryptDecrypt解决NTE_BAD_DATA
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- 如何检测是否在缓冲绘画动画中绘制最后一帧?
- 斐波那契数列部分和的最后一位数字
- std::ifstream 在读取文件中最后一项时设置 eofbit,但仅在读取数值类型时发生
- 将第 n 个斐波那契数的大斐波那契数的最后一位编程.C++
- 经过最后一个数组元素末尾的指针是否应该等于超过整个数组末尾的指针?
- 如何在 Win32 中用一条线连接 2 个文本框?
- foor 循环的最后一次迭代中的指针更改
- 访问类成员向量最后一项的正确方法
- C++ 如何在同一行中和在一条线上?
- 从函数参数包中删除最后一项
- 如何在SDL2窗口上使用Cairo绘制一条白色直线
- 为什么当 while 循环中的 if 条件变为 false 时,我的函数不输出最后一条语句?
- 为什么 fstream 打印出文件的最后一条记录
- 为什么 protobuf 只读取最后一条消息作为输入结果
- qsqlQuery 中的 next() 返回表中的最后一条记录
- 在QGraphicsView上的第一个和最后一个QPoint之间绘制一条线
- 应该删除必须是析构函数中的最后一条语句
- 如何确保在关闭连接之前成功发布最后一条AMQP消息