相关疑难解决方法(0)

为什么不删除将指针设置为NULL?

我总是想知道为什么在删除后将指针自动设置为NULL 不是标准的一部分.如果这一点得到解决,那么由于指针无效而导致的许多崩溃都不会发生.但是,我已经说过,我可以想到为什么标准会限制这个:

  1. 性能:

    额外的指令可能会降低delete性能.

  2. 可能是因为const指针.

    然后标准可能已经为这个特殊情况做了一些事情我想.

有没有人知道不允许这个的确切原因?

c++ memory-management delete-operator

122
推荐指数
8
解决办法
5万
查看次数

删除后指针本身会发生什么?

void doSomething()
{  
    TheObject *ptr = new TheObject;
    delete ptr;
    ptr = NULL;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

让我借用cplusplus.com中operator delete的字样:

释放由ptr指向的内存块(如果不为null),通过调用operator new释放先前分配给它的存储空间,并使该指针位置无效.

请帮助清除我的困惑:删除后指针本身会发生什么?指针本身确实有一个地址,对吗?所以在删除指向的块之后,指针本身呢?

在返回指针初始化的方法后,我可以说指针本身是自由的吗?指针本身是放在堆栈还是堆上?

c++ pointers

13
推荐指数
1
解决办法
1万
查看次数