В большом проекте, скомпилированном с использованием последнего g++, последовательно наблюдается поведение в "--- > ":
void somewhere ()
{
T* pt = find(x); // returns `nullptr` for `x`
foo(*pt);
}
void foo (T& t) // many times `t` is created from `pt = nullptr`
{
if(condition)
t.set(0); // ---> But app crashes, only if this is touched
}
Значит, find(x) всегда возвращает nullptr в pt. Но приложение не сбой, если только condition не является истинным. Предположим, если condition никогда не будет истинным, если pt было nullptr, приложение все еще находится в состоянии UB?
Другими словами, как указано в вопросе:
Разыменовывает NULL-указатель в ссылку, к которой никогда не обращаются для чтения/записи, а также undefined поведение?
Поскольку нулевой указатель сам по себе не является UB, а доступен только ему. Точно так же ссылка, полученная от такого указателя (аналогично "нулевая ссылка" ), не должна действовать одинаково!