The disadvantages you named are indeed very real, especially for shapes
with lots of sharp edges or different textures. A cube is the worst
possible example for vertex sharing, each vertex has 3 different normals
and possibly texture coordinates. It is essentially impossible to share the
However think of some organic shape. Like a ball, the body of some
animal, cars, trees or even something as simple as a desert or something.
These shapes probably need a high amount of vertices to look like anything
decent, but a lot of those vertices are shared between faces. They need the
exact same normals, texture coordinates and whatevers in order to look
Furthermore, the first disadvantage is not really that important.
Calculating the vertices can be done in preprocessing, in most cases even
by the modeller. This is basically never done realtime, instead you simply
already have it in this format. However if it does need to be done realtime
you can imagine this becoming an actual issue, and you need to start
thinking about the trade offs and profile. But even then it can probably be
dealt with using geometry shaders, if the visual fidelity is needed this
can be a preferable solution.
In conclusion it heavily depends on what you're doing. In some cases
vertex sharing isn't really viable because of the reasons you mentioned.
Regardless, in many many cases it can potentially save a lot of memory.