X* x = 0;
(*x).f(); // the null pointer? (1)
Я думаю, что это квалифицируется как разыменование, хотя f()
фактически никогда не использует указатель this
, и в X
нет виртуальных методов. Мой рефлекс должен был сказать, что это крушение, но теперь, когда я об этом думаю, я не уверен в этом.
x = X::get();
(*x).f(); // the null pointer? (2)
Возможно, неверный указатель. не уверен, что это потерпит крах (см. выше для рассуждений).
x = reinterpret_cast<X*>( X::get() - X::get() );
(*x).f(); // the null pointer? (3)
Скомпилируется ли выражение X::get() - X::get()
? Я не думал, что законно было вычесть указатель из другого указателя, подобного этому.
РЕДАКТИРОВАТЬ: D'Oh! Конечно это законно. О чем я только думал? Я ясно, что я бордовый.