我首先要说的是,使用智能指针,你永远不必担心这一点.
以下代码有什么问题?
Foo * p = new Foo;
// (use p)
delete p;
p = NULL;
Run Code Online (Sandbox Code Playgroud)
这是由另一个问题的回答和评论引发的.Neil Butterworth的一条评论产生了一些赞成:
在删除后将指针设置为NULL不是C++中的通用优良做法.有时候它是一件好事,有时它是毫无意义的,可以隐藏错误.
有很多情况下它无济于事.但根据我的经验,它不会伤害.有人开导我.
如果我定义一个结构......
struct LinkNode
{
int node_val;
struct LinkNode *next_node;
};
Run Code Online (Sandbox Code Playgroud)
然后创建一个指向它的指针......
struct LinkNode *mynode = malloc(sizeof(struct LinkNode));
Run Code Online (Sandbox Code Playgroud)
......然后终于免费()它......
free(mynode);
Run Code Online (Sandbox Code Playgroud)
...我仍然可以访问结构的'next_node'成员.
mynode->next_node
Run Code Online (Sandbox Code Playgroud)
我的问题是:底层机制的哪一部分跟踪这个内存块应该代表一个结构LinkNode的事实? 我是C的新手,我期望在我使用指向我的LinkNode的指针上的free()后,我将无法再访问该结构的成员.我期待某种"不再可用"的警告.
我想更多地了解基础流程的工作原理.