删除后为什么(&this!= nullptr)?

Joh*_*ith -8 c++ oop debugging

我有一节课:

class A
{
public:
    void foo(void)
    {
        // equals to syntactically incorrect (&this == nullptr)
        if (*(void**)this == nullptr)
            return;
        ...
    }
};
Run Code Online (Sandbox Code Playgroud)

我这样使用它:

A * a = new A;
...

delete a;
...

a->foo();
Run Code Online (Sandbox Code Playgroud)

为什么条件只true适用于发布版本?如果我切换到调试版本,我通常会得到类似0xFEEFEEFE的东西.

编辑

好,朋友们.你说的是绝对正确的,我知道.未定义的行为是标准未指定的行为.这是每个平台以自己的方式实现(但实现)的方式.

这个问题的目的是了解它是如何在Windows中实现的.这段代码总能正常工作('总是正确'意味着:在所有版本的Windows上(以xp开头),任何编译器调用该方法,语句为真)).在我的情况下,我想知道如果在Windows中删除对象会发生什么.

PS我应该在wasm.ru中问过这个问题.抱歉.

Chr*_*eck 5

为什么这一切都是真的?没有指定删除它后指针的值是什么.删除后,不需要实现将指针设置为null.this除非你已经在疯狂的城镇,否则真的不应该是空的.

编辑:OP显示更多代码后:

A * a = new A;
...

delete a;
...

a->foo();
Run Code Online (Sandbox Code Playgroud)

是的,那条线a->foo();?这就像是获得未定义行为的最可靠方法.