It's not hiding logical errors if it alerts you that's something is wrong.
But it doesn't alert you? Just does nothing if the case would appear, meaning you wouldn't catch it.
What is your view on assertions then if you believe a simple pointer validity check is pointless?
There might be a few assertions in my code to check a pointer is not null, to make sure an api is not misused, but even those are really a bit pointless, because if the pointer is not allowed to be null, the api should be redesigned to use references instead.
It is pointless to do, because you can by design guarantee that the pointer never is invalid.
Making sure all ownerships are clearly defined, and objects sensibly organised and passed around and used, will make sure all pointers and references are valid when they need to be, no need to check.
Though I have to admit, this was a lot harder to do before C++11 and std::unique_ptr.
std::unique_ptr helps to enforce the ownership structure you define.
Just using raw pointers you have to keep careful track of it yourself (with comments or notes or memory).
There is one case where a check is needed, and that is when null is a valid value for the pointer, which is a perfectly reasonable case, though not that common (and really the only case when a raw pointer might be the tool for the job in C++11)
But thats not what we are discussing, we are discussing trying to detect if the pointer is in an invalid state.
Though as mentioned in this thread, its not really possible to catch all cases of invalid state of the pointer, so it is better to design your program such that the pointer never can be invalid.
(c++ nazi off)
I don't really care that much which style you prefer coding by, and I'm sure many great software engineer have preferred nulling pointers excessively.
Though when I encounter it in code, I get worried the developer didn't put much thought into the ownerships of objects, and that there might be serious issues with it...