Невиртуальные методы представляют собой обычные функции, которые получают неявный праметр this на экземпляр класса. Получается что даже код.
A *a = NULL;
a->f();
скомпилируется, но будет работать неправильно.
При вызове нестатических методов (включая деструктор) и обращении к нестатическим полям вы должны гарантировать:
1. вызвался конструктор, объект существует
2. не вызывался деструктор, объект еще не удален