There is a c++ code shown below:
class Metadata : public MetaspaceObj {
void print_value_on_maybe_null(outputStream* st) const {
if (this == NULL)
st->print("NULL");
else
print_value_on(tty);
}
}
I just wonder how could 'this' be NULL in a C++ object.Could be there a possibility?
The code above is excerpted from jdk8/openjdk/hotspot/src/share/vm/oops/metadata.hpp.
In C++ you actually can dereference and call member functions on a NULL
pointer.
Consider:
Metadata* pointer = nullptr;
pointer->print_value_on_maybe_null(...);
The code above is valid C++ code, it compiles fine. The problem with this is that it leads to undefined behavior.
Going back to the code in the question, I think there were, some time in the past, a bug somewhere that cause the member function to be called on a null pointer, and instead of trying to find and fix the root cause of the problem, the authors just added a check for this == NULL
.