delete ptr;后ptr成了"空悬指针",即指向一块曾经保存数据对象但现在已经无效的内存的指针。此时,ptr会在在内存里乱指一通,有可能指到一些重要地址造成出错,因此为了使用的安全,我们一般在delete ptr之后还会加上ptr = nullptr;这一语句使其不指向任何对象。 (二)未置为nullptr后果 #include<iostream>#include<mem...
这是在写LeetCode 146.LRC缓存时发现的bug,关于那道题(调试了我一个多小时)明天再聊~ 晚安
如果所有被delete的指针都被置为nullptr,以后再去访问这个指针的时候,我们可以通过其与nullptr的比较轻松判断出资源是否已经被delete。当然,这个优势基于一个重要的前提:在设计上允许在资源已经失效的情况下,资源的持有者保持有效。如果资源的持有者也被干掉了,那即使你想通过nullptr判断资源是否存在,你也找不到持有资源...
对指针调用delete之后要记得把指针赋值为nullptr 否则,如果这个指针被重复delete,会死机。 #include<iostream>usingstd::cout;usingstd::endl;usingstd::ostream;classTree{intheight;public:Tree(inttreeHeight):height(treeHeight){cout<<__func__<<"(), this = "<<this<<endl;}~Tree(){cout<<"~Tree()\...
指针不一定是可变的,如 int* const ptr;无法把所有相等的指针都置空,如果只置空在 free/delete 时...
delete一个指针之后,只是回收指针指向位置的空间,而指针本身的值不变。你需要手工将其赋值为NULL。另外delete NULL的话不会有任何事情发生。
看了大家的回答,我稍微总结下两个派别一个不支持delete后置空,因为之后你还要使用,那你没必要置空,...
释放以后, new创建新的继续使用, 可以不置空。2. free, delete操作传递的是指针的值,你传一个值...
用不置空的可以实现置空的。默认置空了,无法实现不需要置空的时候的零开销。