在 this paragraph of C++ FAQ讨论了 delete this
构造的用法。列出了 4 个限制。
限制 1 到 3 看起来很合理。但是为什么有限制 4 我“不能检查它,将它与另一个指针比较,将它与 NULL 比较,打印它,强制转换它,用它做任何事情”?
我的意思是 this
是另一个指针。为什么我不能将其reinterpret_cast
转换为 int
或调用 printf()
来输出其值?
最佳答案
调用 delete 后 'this' 的值是未定义的,你对它所做的任何事情的行为也是未定义的。虽然我希望大多数编译器做一些明智的事情,但没有什么(在规范中)阻止编译器决定它在这种特殊情况下的行为将发出代码来格式化你的硬盘。调用未定义的行为(几乎)总是一个错误,即使您的特定编译器以您希望的方式运行。
您可以通过在调用 delete 之前获取指针的拷贝(作为整数)来解决此问题。
关于c++ - 为什么我不应该尝试在 "this"之后使用 "delete this"值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1866461/