c++ - 为什么我不应该尝试在 "this"之后使用 "delete this"值?

标签 c++ undefined-behavior

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/

相关文章:

c++ - 在声明和初始化指针后,什么时候给变量字面量加上星号前缀,什么时候不用?

c++ - 如何使用 Qt 5 + VTK 启用 OpenGL 核心配置文件 3.2?

c++ - 继承时删除重复的模板类型名条目

c++ - 项目中可能存在未定义行为以及是否添加功能的困境

c++ - 临时对象最初是 const 吗?

javascript - AngularJS 文本框返回未定义的值

c++ - QQuickView 上未触发触摸事件

c++ - Boost R-tree 是否支持层级遍历?

c - char[] + memcpy() 是否违反严格别名?

Rust FFI 和别名 : C -> Rust -> C -> Rust call stacks with C values being aliased: Undefined Behaviour?