Я смотрю на что-то, что я обнаружил в старой кодовой базе, и я довольно смущен.
Вот определение функции:
void vUpdateSequenceDetailsAndIncrement(
const CallEvent& roCPEvent,
const CallInfo& roCallInfo,
BOOL bCreationEvent);
Здесь это называется:
vUpdateSequenceDetailsAndIncrement(roCPEvent, NULL, FALSE);
Здесь NULL передается непосредственно в опорный параметр roCallInfo
. Эта функция в конечном итоге вызывает:
vTimeChange(*pSeqDetails, roCPEvent, roCallInfo);
что определено:
void vTimeChange(const SequenceDetails& roSequenceDetails,
const CallEvent& roCPEvent,
const CallInfo& roCallInfo)
Снова передавая возможно значение NULL roCallInfo
. Я думал, что NULL не может быть передан в качестве ссылки? Кто-нибудь знает, была ли в VC ++ 4.x какая-то проблема, из-за которой этот код был в порядке? Если в качестве ссылки можно передать NULL, то что происходит, когда в vTimeChange происходит что-то подобное:
roCallInfo.getCallStartTime();
Разве это не разыменование NULL таким же образом, как если бы я должен был сделать
CallInfo * info = NULL;
info->getCallStartTime();
?
В любом случае, я, возможно, в любом случае поставлю там охрану и позволю компилятору удалить его, если в этом нет необходимости, но я бы хотел узнать, как это происходит!
Спасибо.