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中问过这个问题.抱歉.
为什么这一切都是真的?没有指定删除它后指针的值是什么.删除后,不需要实现将指针设置为null.this除非你已经在疯狂的城镇,否则真的不应该是空的.
编辑:OP显示更多代码后:
A * a = new A;
...
delete a;
...
a->foo();
Run Code Online (Sandbox Code Playgroud)
是的,那条线a->foo();?这就像是获得未定义行为的最可靠方法.