All virtual classes usually have a vtable, but it is not required by the C++ standard and the storage method is dependent upon the compiler.
Not necessarily
Pretty much every object that has a virtual function will have one v-table pointer. There doesn't need to be a v-table pointer for each class that has a virtual function that the object derives from.
New compilers that analyse the code sufficiently may be able to eliminate v-tables in some cases though.
For example, in a simple case: if you only have one concrete implementation of an abstract base class, the compiler knows that it can change the virtual calls to be regular function calls because whenever the virtual function is called it will always resolve to the exact same function.
Also, if there's only a couple of different concrete functions, the compiler may effectively change the call-site so that it uses an 'if' to select the right concrete function to call.
So, in cases like this the v-table isn't needed and the objects might end up not have one.