删除运算符在C++中应用后,地址会发生什么变化?

Sim*_*ity 6 c++ pointers delete-operator

如果我delete指针如下,例如:

delete myPointer;
Run Code Online (Sandbox Code Playgroud)

而且,在这之后也没有分配0如下指针:

myPointer = 0; //skipped this
Run Code Online (Sandbox Code Playgroud)

myPointer指向另一个内存地址吗?

sha*_*oth 18

不,在大多数实现中,它将存储与先前相同的地址 - delete通常不会更改地址,除非您分配新的地址值,否则它将保持不变.然而,这并不总是得到保证.

不要忘记,除了为已经delete指针指定空指针或其他有效指针之外,执行任何操作都是未定义的行为 - 否则您的程序可能会崩溃或行为异常.


Sco*_*ham 5

myPointer将指向相同的内存地址.但是,使用该地址的内存对你来说是无效的,因为delete会将它返回给运行时/操作系统,而操作系统我已分配该内存供其他人使用.

  • @ user588855:也许它返回到操作系统,也许不是,也许其他一些代码(在另一个线程上)要求内存并获得该地址的内存.无论发生什么事情都可能给你带来很多痛苦 - 不要这样做,正确使用指针和动态内存分配. (3认同)