じゃたぶん
v.push_back(static_cast<Base*>(static_cast<void*>(new Derived("hoge"))));
かもしくは
vector<Base*> v(0); //初期化

のどっちか、そんでv.sort()でスライシングってのは間違い、
だけども delete v.back(); ってやるとスライシングが起きる。
つまりBaseのデストラクタとBase用のdeleteが動くので、
new Derived で確保したデータが残ったりデストラクタが行うプロセスとか無視されたりする
ような気がする、、、