C'est normal.
La plupart du temps, quand on utilise des std::vector<Objet*> c'est justement car on ne veut pas que le vecteur détruise l'objet pour nous.
On peut par exemple avoir un std::vector<Objet*> avec un ensemble de pointeur sur des objets vérifiant un certain critère, et une std::list<Objet*> avec un ensemble de pointeur sur des objets vérifiant un autre critère et puis peut être une std::map<int, Objet*> pour indexer tout nos objets, etc, etc.
Pour détruire réellement l'objet pointé, et bien on lit l'excellente faq de developpez sur le sujet
(en gros, faire un delete sur l'objet avant l'erase)
Edit : Désolé, j'ai répondu trop vite 
free (*it); // delete (*it); ne marche pas plus
Si, si delete (*it) détruit bien l'objet pointé.
Partager