Это вероятно, но не гарантировано , чтобы не вызвать ошибку, потому что ваш B_method эффективно static
.
- Метод может быть найден и вызван без разыменования указателя класса
- Самому методу не нужно разыменовывать указатель класса.
Как только метод становится virtual
(и теперь для доступа к виртуальной таблице требуется указатель класса для поиска адреса функции), доступа к данным класса, или вы чихаете или смотрите на компилятор смешно, вы будете иметь дело несвязанный доступ к памяти.
И я должен подчеркнуть, что хотя гипотетический компилятор не требует разыменования указателя класса, он разрешен, и может потребоваться любой конкретной реализацией компилятора.
Дальнейшее чтение ... проверьте принятый ответ Разница между объектом и экземпляром: C ++ Ваш указатель класса вряд ли будет рассматриваться до тех пор, пока вы не получите доступ к instance data
, связанному с конкретным экземпляром класса.
Или ... другой способ сложить все это Если вы можете добавить static
перед объявлением функции, вызов с недопустимым указателем может сработать.
Смотри также:
class MyClass
{
public:
int doSomething(int x)
{
printf("%d", x);
return x;
}
};
int main()
{
MyClass *pMyClass = nullptr;
pMyClass->doSomething(42);
}