Doubutu←Honyurui←Inu
            ←Neko
     ←Chorui  ←Suzume
            ←Karasu

このようなクラス階層のオブジェクトをポリモフィズムする場合...

std::vector<Doubutu*> doubutu_;
と保持して、HonyuruiやChoruiに純粋仮想と定義されたメンバ関数を呼び出す時はダウンキャストする。

ダウンキャストするぐらいなら最初から、
std::vector<Honyurui*> honyurui_;
std::vector<Chorui*> chorui_;
と保持する。

どちらがいいのでしょうか?