这可能在大多数现代硬件上工作,但这是未定义的行为。我相信(我在网上读到过)的理由是,某些架构在其指针寄存器中具有陷阱功能,因此如果您将指针加载到寄存器中并且该指针指向未分配的内存,则该架构可能会发出信号。
delete
本身可能会修改指针使其无效,但如果没有触及到指针,它们是可以随意复制的。现在看来有点可怕...谢谢。 - user541686this
指针有点特殊,因为在虚继承中计算它需要通过对象本身读取虚拟子对象的偏移量。(我希望调用者在进入成员函数之前就完成此操作,但我不知道100%的实际编译器是否这样做)
delete this
甚至不应该合法,因为它指向实际分配块内的“子对象偏移量”,对吧? - DaoWenthis
指针不是在函数进入之前就必须计算出来吗?函数并不会“知道”指针指向一个子类,它期望的是指向当前类的指针... - user541686dynamic_cast<void*>(this)
这样的代码,那么就必须这样做。 - Ben Voigtthis->whatever_member
,包括源代码没有明确写出this
的情况。 - Ben Voigt
some_pointer
的类型不是void*
,且没有进行强制转换时,printf("%p", some_pointer);
是否被定义? - Ben Voigtthis == this;
。反正这也不是问题的重点。 - user541686this
的,对吧? - DaoWen