Вы блуждаете по неопределенным территориям.
Вы можете думать о вызове функции-члена, как о вызове обычной функции с дополнительным, неявным аргументом this
указателя.Сам вызов функции просто помещает аргументы на место в соответствии с соглашением о вызовах и переходит на адрес памяти.
Так что простой вызов функции-члена по указателю объекта NULL не обязательно вызывает сбой (если только это невиртуальная функция).Вы получаете недопустимый сбой доступа к памяти только при попытке доступа к переменным-членам объекта или vtable.
В случае # 2 вы можете получить или не получить немедленный сбой в зависимости от того, как объявлено anotherfunc
.Если значение равно someObj
, то вы косвенно обращаетесь к NULL в самом вызове функции, что приводит к сбою.Если для ссылки требуется someObj
, то обычно ничего не происходит, поскольку ссылки реализуются с использованием указателей под капотом, а фактическое косвенное обращение откладывается до тех пор, пока вы не попытаетесь получить доступ к данным элемента.