java - C++ 类中 'this' 指针可以为空吗?

标签 java c++ jvm metadata

下面是一段c++代码:

class Metadata : public MetaspaceObj {
    void print_value_on_maybe_null(outputStream* st) const {
    if (this == NULL)
      st->print("NULL");
    else
      print_value_on(tty);
    }
}

我只是想知道 C++ 对象中的“this”怎么可能为 NULL。有可能吗?

上面的代码摘自jdk8/openjdk/hotspot/src/share/vm/oops/metadata.hpp。

最佳答案

在 C++ 中,您实际上可以在 NULL 指针上取消引用和调用成员函数。

考虑:

Metadata* pointer = nullptr;
pointer->print_value_on_maybe_null(...);

上面的代码是有效的 C++ 代码,可以正常编译。这样做的问题是它会导致 undefined behavior .


回到问题中的代码,我认为过去某个时候,某个地方存在一个错误,导致在空指针上调用成员函数,而不是尝试查找并修复根本原因对于这个问题,作者只是添加了对 this == NULL 的检查。

关于java - C++ 类中 'this' 指针可以为空吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25839843/

相关文章:

java - 队列 Java 中的值

java - 发言失败:not bound to tts engine

c++ - 为什么 C++ 不知道 TIMESTAMP_STRUCT 类型?

c++ - 过剩和 glew 的突然问题包括和类型说明符

Java - 如何加载同一类的不同版本?

java - fragment 、AsyncTask 和监听器

java - 从字符串 [] 的所有元素中删除引号

c++ - 如何从点云获取颜色信息并显示它? -Qt

java - 在 64 位 JVM 上运行 Openfire

java - 在 JVM 级别重新定义 Locale 的日期时间格式