给定这段代码:
#include <iostream>
#include <assert.h>
using namespace std;
struct Foo
{
// something
};
int main()
{
Foo *p1 = new Foo;
Foo * p2 = p1;
assert(NULL != p1);
delete p1;
p1 = NULL;
assert(NULL != p2);
delete p2;
cout << "everything is cool!" << endl;
return 0;
}
当我删除 p1
时,第二个断言 (assert(NULL != p2);
) 没有失败,为什么?
输出:一切正常!
那为什么 p2
的断言没有失败呢?
最佳答案
When I delete p1 , the second assert (assert(NULL != p2);) is not failing , why ?
删除 p1
或分配给它对 p2
本身没有影响。删除 p1
后,p2
仍指向该地址,即指向已失效的对象。它变成了所谓的悬挂指针。当然,访问它或删除它(您正在做的)是未定义的行为。
关于c++ - 断言两个指针都指向 NULL 在 delete() 之后没有发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12122338/