3

这个问题的答案是指这个页面,它说,为了delete this;正确行事:

您必须绝对 100% 肯定地确定在删除此行之后甚至没有人触摸 this 指针本身。换句话说,你不能检查它,不能和另一个指针比较,不能和 比较NULL,不能打印,不能转换,不能用它做任何事情。

我不明白为什么触摸指针本身会导致问题。
有人可以向我解释一下吗?

4

2 回答 2

4

它可能适用于大多数现代硬件,但它是未定义的行为。我相信基本原理(我在网上某处读到)是某些架构在其指针寄存器中具有捕获功能,因此如果您将指针加载到寄存器中并且该指针指向未分配的内存,该架构可能会触发信号。

于 2013-07-12T17:05:33.543 回答
2

this指针有点特殊,因为使用虚拟继承在对象上计算它需要通过对象本身读取虚拟子对象偏移量。(我希望调用者在进入成员函数之前完成,但我不知道现实世界的编译器是否 100% 这样做)

于 2013-07-12T17:13:10.500 回答